[
https://issues.apache.org/jira/browse/CXF-3291?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12991497#comment-12991497
]
Daniel Kulp commented on CXF-3291:
----------------------------------
If you modify the WSDL like that, the client is no longer using the same
contract as the server and this type of behavior is expected. In particular,
the server doesn't think the "id" field is nillable, thus, it won't check for
the xsi:nil attribute. It shouldn't be there. I think it works with Metro
as they have JAXB configured to ignore certain invalid message constructs where
we turn on some of the errors as it's important (we feel) to let people know
when something isn't working correctly or as expected.
In anycase, if you modify the FilterDTO class on the server side to have:
@XmlElement(nillable = true)
private Long id;
It runs fine as the server side will now expect it to have an xsi:nil
attribute and will process it accordingly.
> Unmarshalling null value for java.lang.Long generates an empty string
> exception
> -------------------------------------------------------------------------------
>
> Key: CXF-3291
> URL: https://issues.apache.org/jira/browse/CXF-3291
> Project: CXF
> Issue Type: Wish
> Components: JAXB Databinding
> Affects Versions: 2.3.1
> Environment: Microsoft Windows 7 Enterprise, jdk1.6.0_23, JBoss 6.0
> final which contains 2.3.1 version of CXF.
> Intel Dual Core, 3GB RAM
> Reporter: Victor-Adrian Ichim
> Fix For: NeedMoreInfo
>
> Attachments: cxf3291_eclipse_projects.zip
>
>
> java.lang.Long is not unmarshalled (while primitive long works)
> Steps to reproduce:
> 1. Create a RPC-LITERAL web service on a stateless session bean with a single
> method like this:
> public ResultDTO compute(FilterDTO filter)
> FilterDTO must contain a java.lang.Long id; property.
> Annotated FilterDTO with @XmlAccessorType(XmlAccessType.FIELD)
> 2. Generate the wsdl file with org.apache.cxf.tools.java2ws.JavaToWS
> 3. Deploy the ear by including the wsdl file also (wsdlLocation is specified
> on the bean for @WebService)
> 4. Start the server and use a client to call the method. Having RPC-LITERAL
> the parameter must be not null in the request.
> So FilterDTO must be instantiated. Do not assign any value to the id field
> (let it null).
> Result:
> 16:40:36,317 INFO [STDOUT] DefaultValidationEventHandler: [ERROR]: For input
> string: ""
> 16:40:36,317 INFO [STDOUT] Location: line 1
> 16:40:36,323 WARN [org.apache.cxf.phase.PhaseInterceptorChain] Interceptor
> for {http://ws.ro/}ServiceFacadeService#{http://ws.ro/}compute has thrown
> exception, unwinding now: org.apache.cxf.interceptor.Fault: Unmarshalling
> Error: For input
> string: ""
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:787)
> [:2.3.1]
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:628)
> [:2.3.1]
> at
> org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:133) [:2.3.1]
> ........
> Caused by: javax.xml.bind.UnmarshalException
> - with linked exception:
> [javax.xml.bind.UnmarshalException: For input string: ""
> - with linked exception:
> [java.lang.NumberFormatException: For input string: ""]]
> at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:425)
> [:
> 2.2]
> at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
> [:2.2]
> at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339)
> [:2.2]
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:764)
> [:2.3.1]
> Caused by: javax.xml.bind.UnmarshalException: For input string: ""
> - with linked exception:
> [java.lang.NumberFormatException: For input string: ""]
> ... 46 more
> Caused by: java.lang.NumberFormatException: For input string: ""
> at
> java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> [:1.6.0_23]
> at java.lang.Long.parseLong(Long.java:431) [:1.6.0_23]
> at java.lang.Long.valueOf(Long.java:525) [:1.6.0_23]
> at
> com.sun.xml.bind.DatatypeConverterImpl._parseLong(DatatypeConverterImpl.java:143)
> [:2.2]
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira