cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "VividApp On Software (JIRA)" <j...@apache.org>
Subject [jira] Created: (CXF-2168) IllegalAnnotationException on Collection properties, Getter must return "Collection", Setter must take "List" as parameter
Date Fri, 10 Apr 2009 17:39:14 GMT
IllegalAnnotationException on Collection properties, Getter must return "Collection", Setter
must take "List" as parameter
--------------------------------------------------------------------------------------------------------------------------

                 Key: CXF-2168
                 URL: https://issues.apache.org/jira/browse/CXF-2168
             Project: CXF
          Issue Type: Bug
          Components: JAXB Databinding
         Environment: jax-rs
            Reporter: VividApp On Software
            Priority: Critical


Problem is with jaxb in relation to jax-rs.

This problem is excruciatingly annoying and has resulted in days of wasted time, almost to
the point of giving up!!
I am marking this as Critical, as I think it will drive people away from using CXF jax-rs
if they encounter this problem.

Getting some very strange behaviour with Collection properties if I do not do the following.
- The Getter must a type of "Collection"
- The Setter parameter must be a "List".

If both Getter and Setter are consistent and both return either a Collection or a List, an
IllegalAnnotationException occurs (See Debug output below).
ie. One must return a Collection, and the other must take a List.

I get this if I annotate with @XmlElementRefs and also with @XmlAnyElement (coupled with @XmlSeeAlso)

I don't think this is a problem with the jaxb-api, as I also tried it with jaxb 2.0

I have included my Maven dependency at the bottom.


############################
My code is as follows:




@XmlRootElement(name = "data")
// @XmlSeeAlso({Echo.class, Basicdetails.class, UrlDescriptor.class})
public class Data {
	
	// @XmlAnyElement(lax = true)
	@XmlElementRefs({
         @XmlElementRef(name = "basicdetails", type = Basicdetails.class),
         @XmlElementRef(name = "urldescriptor", type = UrlDescriptor.class),
         @XmlElementRef(name = "echo", type = Echo.class)
     })
	private Collection<Record> records;

	public Data() {
	}

	public Data(final Record record) {
		addRecord(record);
	}

	public Collection<Record> getRecords() {
		return records;
	}


        /**
        * THIS MUST TAKE A LIST, EXCEPTIONS OTHERWISE, EVEN THOUGH GETTER IS RETURNING "Collection"
       */
	public void setRecords(final List<Record> records) {
		this.records = records;
	}
	
	public void addRecord(final Record record) {
		if (this.records == null) {
			setRecords(new ArrayList<Record>());
		}
		getRecords().add(record);
	}
}


########################################################
DEBUG OUTPUT:

Content-Type: text/xml
Headers: {content-length=[748], accept-encoding=[gzip, deflate], cache-control=[no-cache],
connection=[Keep-Alive], referer=[http://localhost:8888/com.webauditor.sanity.app.SanityApplication/SanityApplication.html],
host=[localhost:8888], accept-language=[en-gb], user-agent=[Mozilla/4.0 (compatible; MSIE
7.0; Windows NT 5.1; GTB5; .NET CLR 1.1.4322; .NET CLR 2.0.50727)], ua-cpu=[x86], content-type=[text/xml],
Accept=[*/*]}
Payload: 
<request>
    <data>
        <basicdetails>
            <startUrl>http://</startUrl>
            <maxPages>100</maxPages>
            <javascriptEnabled>true</javascriptEnabled>
            <browserType>Internet Explorer</browserType>
        </basicdetails>
    </data>
    <oldValues>
        <startUrl>http://</startUrl>
        <maxPages>100</maxPages>
        <javascriptEnabled>true</javascriptEnabled>
        <browserType>Firefox</browserType>
    </oldValues>
    <dataSource>basicdetails</dataSource>
    <operationType>update</operationType>
    <operationId></operationId>
    <startRow></startRow>
    <endRow></endRow>
    <sortBy></sortBy>
    <textMatchStyle></textMatchStyle>
    <componentId>basicdetails</componentId>
</request>
--------------------------------------
1
Submitting current
SAVING EDITS
1
Submitting current
SAVING EDITS
1
Submitting current
SAVING EDITS
10-Apr-2009 18:21:06 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
WARNING: JAXBException occurred : 3 counts of IllegalAnnotationExceptions
10-Apr-2009 18:21:06 org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse
WARNING: WebApplicationException has been caught : 3 counts of IllegalAnnotationExceptions
10-Apr-2009 18:21:06 org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
INFO: Outbound Message
---------------------------
Encoding: 
Content-Type: text/plain
Headers: {Content-Type=[text/plain]}
Payload: JAXBException occurred : 3 counts of IllegalAnnotationExceptions
--------------------------------------
10-Apr-2009 18:21:06 org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
INFO: Outbound Message
---------------------------
Encoding: 
Content-Type: text/plain
Headers: {Content-Type=[text/plain]}
Payload: JAXBException occurred : 3 counts of IllegalAnnotationExceptions
--------------------------------------

#############################################################
MAVEN SETUP
	<dependencies>
		<dependency>
			<groupId>javax.ws.rs</groupId>
			<artifactId>jsr311-api</artifactId>
			<version>1.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-bundle-jaxrs</artifactId>
			<version>2.2</version>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring-context</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring-beans</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.abdera</groupId>
					<artifactId>abdera-i18n</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.abdera</groupId>
					<artifactId>abdera-extensions-main
					</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.abdera</groupId>
					<artifactId>abdera-extensions-json
					</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.abdera</groupId>
					<artifactId>abdera-core
					</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.abdera</groupId>
					<artifactId>abdera-parser
					</artifactId>
				</exclusion>
			</exclusions>
		</dependency>



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message