-
1. Re: Seam Generated CRUD application and RESTeasy Integration
christian.bauer Jul 18, 2009 6:08 PM (in response to tejones)Have a look at /examples/tasks/ which is a simple CRUD app with a REST interface.
-
2. Re: Seam Generated CRUD application and RESTeasy Integration
tejones Jul 20, 2009 5:40 PM (in response to tejones)Thanks Christian. Based on the sample, it looks like I need to create resource objects that make use of the generated EntityHome objects in addition to adding the necessary
framework
andresteasy
tags in the components.xml? -
3. Re: Seam Generated CRUD application and RESTeasy Integration
christian.bauer Jul 20, 2009 5:47 PM (in response to tejones)I don't know what a
resource object
is, but if you mean actual Java classes with @Path then no, you don't have to write them if you map an entity class with <framework:resource-*>. Both the /examples/tasks and /examples/restbay show how that works, it's the same as in the blog article.Write an entity class, put @Entity on it. Add <framework:entity-home...> and <framework:resource-home...> to your components.xml, done.
-
4. Re: Seam Generated CRUD application and RESTeasy Integration
tejones Jul 29, 2009 4:42 PM (in response to tejones)Thanks Christian. Now I'm getting this:
Could not find MessageBodyWriter for response object of type: java.util.RandomAccessSubList of media type: application/xml
trying to get to my resource. Any ideas on what the issue may be?Thanks
-
5. Re: Seam Generated CRUD application and RESTeasy Integration
jharting Aug 4, 2009 8:36 PM (in response to tejones)Can you post your components.xml file?
-
6. Re: Seam Generated CRUD application and RESTeasy Integration
tejones Aug 5, 2009 8:10 PM (in response to tejones)Hi Jozef,
The components.xml is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:drools="http://jboss.com/products/seam/drools"
xmlns:bpm="http://jboss.com/products/seam/bpm"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:mail="http://jboss.com/products/seam/mail"
xmlns:web="http://jboss.com/products/seam/web"
xmlns:framework="http://jboss.com/products/seam/framework"
xmlns:resteasy="http://jboss.com/products/seam/resteasy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.1.xsd
http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.1.xsd
http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.1.xsd
http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.1.xsd
http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.1.xsd
http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.1.xsd
http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.1.xsd
http://jboss.com/products/seam/framework http://jboss.com/products/seam/framework-2.1.xsd
http://jboss.com/products/seam/resteasy http://jboss.com/products/seam/resteasy-2.1.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.1.xsd">
<core:init debug="true" jndi-pattern="@jndiPattern@"/>
<core:manager concurrent-request-timeout="500"
conversation-timeout="120000"
conversation-id-parameter="cid"
parent-conversation-id-parameter="pid"/>
<!-- Make sure this URL pattern is the same as that used by the Faces Servlet -->
<web:hot-deploy-filter url-pattern="*.seam"/>
<persistence:entity-manager-factory name="entityManagerFactory"
persistence-unit-name="books_demo"/>
<persistence:managed-persistence-context name="entityManager" auto-create="true"
entity-manager-factory="#{entityManagerFactory}"/>
<!-- <framework:entity-home name="authorHome"
entity-class="org.domain.booksdemo.entity.BooksVirtual.books.authors" auto-create="true" />
<framework:entity-query name="authorsQuery"
ejbql="select a from Authors a">
</framework:entity-query> -->
<resteasy:resource-home path="/author" name="resourceAuthorHome"
entity-home="#{authorsHome}" entity-id-class="java.lang.Long"
media-types="application/xml application/json"/>
<resteasy:resource-query name="authorsResourceQuery"
entity-query="#{authorsQuery}" path="/author"
entity-class="org.domain.booksdemo.entity.BooksVirtual.books.authors"
media-types="application/html"/>
<resteasy:application resource-path-prefix="/teiid">
<!-- <resteasy:media-type-mappings>
<key>xml</key>
<value>application/xml</value>
</resteasy:media-type-mappings> -->
</resteasy:application>
<drools:rule-base name="securityRules">
<drools:rule-files><value>/security.drl</value></drools:rule-files>
</drools:rule-base>
<security:rule-based-permission-resolver security-rules="#{securityRules}"/>
<security:identity authenticate-method="#{authenticator.authenticate}" remember-me="true"/>
<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
</event>
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
</event>
<mail:mail-session host="localhost" port="25"/>
<!-- For use with jBPM pageflow or process management -->
<!--
<bpm:jbpm>
<bpm:process-definitions></bpm:process-definitions>
<bpm:pageflow-definitions></bpm:pageflow-definitions>
</bpm:jbpm>
-->
</components>
Thanks,
Ted -
7. Re: Seam Generated CRUD application and RESTeasy Integration
tejones Aug 5, 2009 8:17 PM (in response to tejones)I was mucking with the media-types in the resource-query node. It is actually:
<resteasy:resource-query name="authorsResourceQuery"
entity-query="#{authorsQuery}" path="/author"
entity-class="org.domain.booksdemo.entity.BooksVirtual.books.authors"
media-types="application/xml application/json"/>
not <resteasy:resource-query name="authorsResourceQuery"
entity-query="#{authorsQuery}" path="/author"
entity-class="org.domain.booksdemo.entity.BooksVirtual.books.authors"
media-types="application/html"/> -
8. Re: Seam Generated CRUD application and RESTeasy Integration
jharting Aug 11, 2009 9:54 AM (in response to tejones)Ted, I find the way you specified entity-class attribute quite confusing. Looks like you are trying to use it in similar way EL is often used however this will not work. The attribute is used to get type information only. You must use the full name of the class like org.domain.booksdemo.entity.Author without going any further.
-
9. Re: Seam Generated CRUD application and RESTeasy Integration
tejones Aug 11, 2009 7:52 PM (in response to tejones)That is how the class was generated. I used the
Generate SEAM Components
option of JBoss Tools. It is the fully qualified name of the entity. -
10. Re: Seam Generated CRUD application and RESTeasy Integration
tejones Aug 11, 2009 10:39 PM (in response to tejones)Ok... got further. I was apparently missing some jars. Now I am getting the follwoing:
15:31:15,230 INFO [STDOUT] Hibernate:
select
authors0_.AUTHOR_ID as AUTHOR1_1_,
authors0_.FIRSTNAME as FIRSTNAME1_,
authors0_.LASTNAME as LASTNAME1_,
authors0_.MIDDLEINIT as MIDDLEINIT1_
from
Books.BooksVirtual.BOOKS.AUTHORS authors0_ limit ?
15:31:17,431 ERROR [STDERR] 32585 [http-127.0.0.1-8080-1] ERROR org.jboss.resteasy.core.SynchronousDispatcher - Failed executing GET /author
15:31:17,431 ERROR [STDERR] org.jboss.resteasy.spi.LoggableFailure: javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.SAXException2: unable to marshal type "org.domain.booksdemo.entity.BooksVirtual.books.authors" as an element because it is missing an @XmlRootElement annotation] -
11. Re: Seam Generated CRUD application and RESTeasy Integration
jharting Aug 12, 2009 12:27 PM (in response to tejones)You will need to put @XmlRootElement on every entity you want to transfer.
-
12. Re: Seam Generated CRUD application and RESTeasy Integration
tejones Aug 19, 2009 10:21 PM (in response to tejones)Thanks... I have tried that. Now getting:
HTTP Status 500 - javax.xml.bind.MarshalException - with linked exception: [com.sun.istack.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML: org.domain.abcbooks.entity.BooksVirtual.books.authors@1642565 -> org.domain.abcbooks.entity.BooksVirtual.books.books@1b79d4f -> org.domain.abcbooks.entity.BooksVirtual.books.authors@1642565]
I have tried a varied combination of annotations to resolve this per the many threads I have come across, but no luck yet. Do you know of a workaround for this Jozef?
Thanks! -
13. Re: Seam Generated CRUD application and RESTeasy Integration
tejones Sep 2, 2009 12:48 AM (in response to tejones)FYI - I was able to resolve the cycle by adding @XmlTransient to my getters for fields with a @ManyToOne relationship.