[ https://issues.apache.org/jira/browse/CXF-369?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12829147#action_12829147 ]
Steven Swor commented on CXF-369: --------------------------------- I get the same error when using Aegis data binding on both the client and server. Here's my setup: {code:title=Service.java} @WebService public interface FooService { public Foo getDataByStringAndMap(String name, Map<String, Object> map); } {code} And here's a snippet from my server's Spring config file that sets up the service to use CXF with Aegis data binding: {code:xml|title=Spring Configuration File Snippet} ... <bean id="AegisDataBinding" class="org.apache.cxf.aegis.databinding.AegisDatabinding" scope="prototype"> <property name="aegisContext"> <bean class="org.apache.cxf.aegis.AegisContext"> <property name="writeXsiTypes" value="true" /> </bean> </property> </bean> <bean id="ServiceFactoryBean" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean" scope="prototype"> <property name="dataBinding"> <ref bean="AegisDataBinding" /> </property> <property name="serviceConfigurations"> <list> <bean class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration"/> <bean class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration"/> <bean class="org.apache.cxf.service.factory.DefaultServiceConfiguration"/> </list> </property> </bean> <jaxws:endpoint id="FooServiceEndpoint" implementor="#FooService" address="/FooService"> <jaxws:serviceFactory> <ref bean="ServiceFactoryBean" /> </jaxws:serviceFactory> </jaxws:endpoint> ... {code} The client is also configured to use CXF with Aegis data binding. Here's the SOAP message sent from the CXF client: {code:xml|title=Client SOAP Message} <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:getDataByStringAndMap xmlns:ns1="http://foo.bar.com/"> <ns1:arg0>name</ns1:arg0> <ns1:arg1> <ns1:entry> <ns1:key>dateFieldName</ns1:key> <ns1:value xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://www.w3.org/2001/XMLSchema-instance" ns2:type="xsd:dateTime">2010-01-01T00:00:00-06:00</ns1:value> </ns1:entry> </ns1:arg1> </ns1:getDataByStringAndMap> </soap:Body> </soap:Envelope> {code} When the client tries to invoke the service method, the service logs the following exception: {noformat} Feb 3, 2010 10:00:51 AM org.apache.cxf.phase.PhaseInterceptorChain doIntercept WARNING: Application has thrown exception, unwinding now org.apache.cxf.interceptor.Fault: com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl cannot be cast to java.util.Date at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:148) at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:83) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:114) at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:55) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:68) at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:98) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236) at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:104) at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:99) at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:452) at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:196) at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:220) at org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java:153) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at org.apache.cxf.transport.servlet.AbstractCXFServlet.service(AbstractCXFServlet.java:211) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl cannot be cast to java.util.Date at com.foo.FooImpl.getDataFromMap(FooImpl.java:50) at com.foo.FooServiceImpl.getDataByStringAndMap(FooServiceImpl.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:166) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:82) ... 32 more {noformat} My FooImpl.getDataFromMap(Map<String, Object>) performs a cast from java.lang.Object to java.util.Date on line 50 (a Date object is expected here). It works just fine if the client has a direct reference to the service object, but when it goes over CXF, I get the error shown above. Looking at the SOAP message, it appears that CXF on the client side is converting java.util.Date to XML correctly, but CXF on the server side is converting the XML back to an instance of javax.xml.datatype.XMLGregorianCalendar instead of java.util.Date. > xsd:dateTime becomes XMLGregorianCalendarImpl when Date needed > -------------------------------------------------------------- > > Key: CXF-369 > URL: https://issues.apache.org/jira/browse/CXF-369 > Project: CXF > Issue Type: Bug > Components: Soap Binding > Affects Versions: 2.0-RC > Environment: svn head, jax-ws api, annotations > Reporter: Cameron Taggart > Assignee: maomaode > Fix For: 2.0.1 > > > I have a web method: > public Date echoDate(String sessionID, Date input); > The soapUI 1.6 client works, but the Axis 1.3 client passes in > xsi:type="xsd:dateTime". The CXF server turns the dateTime into a > XMLGregorianCalendarImpl instead of a date when that is set. AbstractInvoker > then fails at this call res = m.invoke(serviceObject, paramArray); with an > IllegalArgumentException. > Here is the full request that does not work: > <soapenv:Envelope > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > <soapenv:Body> > <echoDate xmlns="urn:TestService/wsdl"> > <sessionID>2CE0B857-43D1-F488-0E0A-F055FDCB8294</sessionID> > <input xsi:type="xsd:dateTime">2008-01-19T00:29:48.889Z</input> > </echoDate> > </soapenv:Body> > </soapenv:Envelope> > Failure Response > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > <soap:Body> > <soap:Fault> > <faultcode>soap:Server</faultcode> > <faultstring>argument type mismatch</faultstring> > </soap:Fault> > </soap:Body> > </soap:Envelope> > Removing 'xsi:type="xsd:dateTime"' makes it work. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.