On Thursday 24 March 2011 6:22:16 AM Ted wrote:
> Hi I'm having a problem and I couldn't find anything in web searches..
> 
> I'm running CXF 2.3.2 on both the client and server.
> 
> I have a web service which sends an object which happens to contain a date
> in the form of a Calendar and it appears one of my clients can't sort it
> out but I'm not 100% sure about what the error message really means.
> 
> When I build my client stubs I use the following binding customisation.
> 
> <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb";
> xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>   <jxb:bindings>
>     <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb";
> xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>       <jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
>           parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
>         printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>
>     </jxb:globalBindings>
>   </jxb:bindings>
> </jxb:bindings>

It's likely due to the "globalBindings" thing.   It really does mean "global".  
 
When it encounters a javaType thing in there, it generates the Adapter into 
the org.w3....  namespace and there isn't a way to change that (from what I 
can tell)     However, it ALWAYS starts at "Adapter1".   If you have one 
application that maps dateTime -> Calendar and another that maps something 
like unsignedLong -> Long  and they run xjc at different times, the one run 
second will likely overwrite the Adapter1 class which will then break the 
first application.   This really is pretty "sucky".

The only way to really work around that is to not stick javaType things in the 
globalBindinds and instead use specific jaxb:bindings to the specific nodes:


    <jaxb:bindings schemaLocation="mySchema.xsd" 
node="//xs:element[@name='MyDateElement']">
        <jaxb:property>          
           <jaxb:baseType>
            <jxb:javaType name="java.util.Calendar"
                parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
                printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>
         </jaxb:baseType>
        </jaxb:property>
    </jaxb:bindings>

This is definitely harder to do if you have a LOT of places to map.  Plus, it 
will generate a ton of Adapter classes.  However, they are in the package of 
the type and thus not "global" in nature.

Dan


 
> I've built the server, and it works fine, I've built the client stubs and
> I've built 1 client application and it also works fine. No problems at all.
> 
> I'm integrating the client stubs into a second client application. I'm
> using the exact same server and exact same wsdl's and method calls but now
> I have problems. It appears it doesn't know how to deal with the Calendar
> object that's being sent in the response from the server. The stack trace
> is as follows :
> 
> javax.xml.ws.WebServiceException:
> org.apache.cxf.service.factory.ServiceConstructionException
>     at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:338)
>     at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:323)
>     at javax.xml.ws.Service.getPort(Service.java:92)
>     at org.oscarehr.myoscar_server.ws.LoginWsService.getLoginWsPort(Unknown
> Source)
>     at
> org.oscarehr.phr.util.MyOscarServerWebServicesManager.getLoginWs(MyOscarSer
> verWebServicesManager.java:59) at
> org.oscarehr.phr.service.PHRService.authenticateIndivoId(PHRService.java:16
> 4) at org.oscarehr.phr.service.PHRService.authenticate(PHRService.java:147)
> at org.oscarehr.phr.web.PHRLoginAction.execute(PHRLoginAction.java:94) at
> org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActi
> onProxy.java:110) at
> org.apache.struts.action.RequestProcessor.processActionPerform(RequestProce
> ssor.java:419) at
> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224
> ) at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
>     at
> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:290) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) at
> oscar.oscarSecurity.LoginFilter.doFilter(LoginFilter.java:101) at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:235) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) at
> net.sf.cookierevolver.servlet.CRFilterImpl.doFilter(CRFilterImpl.java:60)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:235) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) at
> org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilte
> r.java:125) at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:235) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) at
> org.oscarehr.util.LoggedInUserFilter.doFilter(LoggedInUserFilter.java:63)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:235) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) at
> org.oscarehr.util.DbConnectionFilter.doFilter(DbConnectionFilter.java:64)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:235) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) at
> org.oscarehr.util.ResponseDefaultsFilter.doFilter(ResponseDefaultsFilter.ja
> va:44) at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:235) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.j
> ava:233) at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.j
> ava:191) at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:12
> 7) at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:10
> 2) at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.jav
> a:109) at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
>     at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Htt
> p11Protocol.java:588) at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>     at java.lang.Thread.run(Thread.java:662)
> Caused by: org.apache.cxf.service.factory.ServiceConstructionException
>     at
> org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:341)
>     at
> org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBin
> dings(AbstractServiceFactoryBean.java:87) at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFro
> mWSDL(ReflectionServiceFactoryBean.java:407) at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServi
> ceModel(ReflectionServiceFactoryBean.java:506) at
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(Reflecti
> onServiceFactoryBean.java:245) at
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFac
> toryBean.java:202) at
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(Abs
> tractWSDLBasedEndpointFactory.java:101) at
> org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)
>     at
> org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBea
> n.java:117) at
> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.jav
> a:124) at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:471)
> at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:336) ... 45
> more
> Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 6
> counts of IllegalAnnotationExceptions
> Adapter org.w3._2001.xmlschema.Adapter1 is not applicable to the field type
> java.util.Calendar.
>     this problem is related to the following location:
>         at
> @javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(type=class
> javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT, value=class
> org.w3._2001.xmlschema.Adapter1)
>         at protected java.util.Calendar
> org.oscarehr.myoscar_server.ws.PersonTransfer.birthDate
>         at org.oscarehr.myoscar_server.ws.PersonTransfer
>         at protected org.oscarehr.myoscar_server.ws.PersonTransfer
> org.oscarehr.myoscar_server.ws.LoginResponse._return
>         at org.oscarehr.myoscar_server.ws.LoginResponse
> Adapter org.w3._2001.xmlschema.Adapter1 is not applicable to the field type
> java.util.Calendar.
>     this problem is related to the following location:
>         at
> @javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(type=class
> javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT, value=class
> org.w3._2001.xmlschema.Adapter1)
>         at protected java.util.Calendar
> org.oscarehr.myoscar_server.ws.PersonTransfer.editDate
>         at org.oscarehr.myoscar_server.ws.PersonTransfer
>         at protected org.oscarehr.myoscar_server.ws.PersonTransfer
> org.oscarehr.myoscar_server.ws.LoginResponse._return
>         at org.oscarehr.myoscar_server.ws.LoginResponse
> Adapter org.w3._2001.xmlschema.Adapter1 is not applicable to the field type
> java.util.Calendar.
>     this problem is related to the following location:
>         at
> @javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(type=class
> javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT, value=class
> org.w3._2001.xmlschema.Adapter1)
>         at protected java.util.Calendar
> org.oscarehr.myoscar_server.ws.PersonTransfer.lastLogin
>         at org.oscarehr.myoscar_server.ws.PersonTransfer
>         at protected org.oscarehr.myoscar_server.ws.PersonTransfer
> org.oscarehr.myoscar_server.ws.LoginResponse._return
>         at org.oscarehr.myoscar_server.ws.LoginResponse
> Adapter org.w3._2001.xmlschema.Adapter1 is not applicable to the field type
> java.util.Calendar.
>     this problem is related to the following location:
>         at
> @javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(type=class
> javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT, value=class
> org.w3._2001.xmlschema.Adapter1)
>         at protected java.util.Calendar
> org.oscarehr.myoscar_server.ws.SurveyResultTransfer.dateOfData
>         at org.oscarehr.myoscar_server.ws.SurveyResultTransfer
>         at protected java.util.List
> org.oscarehr.myoscar_server.ws.GetSurveyResultsResponse._return
>         at org.oscarehr.myoscar_server.ws.GetSurveyResultsResponse
>         at public org.oscarehr.myoscar_server.ws.GetSurveyResultsResponse
> org.oscarehr.myoscar_server.ws.ObjectFactory.createGetSurveyResultsResponse
> () at org.oscarehr.myoscar_server.ws.ObjectFactory
> Adapter org.w3._2001.xmlschema.Adapter1 is not applicable to the field type
> java.util.Calendar.
>     this problem is related to the following location:
>         at
> @javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(type=class
> javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT, value=class
> org.w3._2001.xmlschema.Adapter1)
>         at protected java.util.Calendar
> org.oscarehr.myoscar_server.ws.UpdateSurveyResult.arg1
>         at org.oscarehr.myoscar_server.ws.UpdateSurveyResult
>         at public org.oscarehr.myoscar_server.ws.UpdateSurveyResult
> org.oscarehr.myoscar_server.ws.ObjectFactory.createUpdateSurveyResult()
>         at org.oscarehr.myoscar_server.ws.ObjectFactory
> Adapter org.w3._2001.xmlschema.Adapter1 is not applicable to the field type
> java.util.Calendar.
>     this problem is related to the following location:
>         at
> @javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(type=class
> javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT, value=class
> org.w3._2001.xmlschema.Adapter1)
>         at protected java.util.Calendar
> org.oscarehr.myoscar_server.ws.AddSurveyResult.arg2
>         at org.oscarehr.myoscar_server.ws.AddSurveyResult
>         at public org.oscarehr.myoscar_server.ws.AddSurveyResult
> org.oscarehr.myoscar_server.ws.ObjectFactory.createAddSurveyResult()
>         at org.oscarehr.myoscar_server.ws.ObjectFactory
> 
>     at
> com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(Illeg
> alAnnotationsException.java:102) at
> com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.
> java:472) at
> com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302
> ) at
> com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBCo
> ntextImpl.java:1140) at
> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
>     at
> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:3
> 9) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp
> l.java:25) at java.lang.reflect.Method.invoke(Method.java:597)
>     at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)
>     at javax.xml.bind.ContextFinder.find(ContextFinder.java:363)
>     at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
>     at
> org.apache.cxf.jaxb.JAXBDataBinding.createContext(JAXBDataBinding.java:557)
>     at
> org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBin
> ding.java:497) at
> org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:324)
>     ... 56 more
> 
> 
> Any ideas?

-- 
Daniel Kulp
[email protected]
http://dankulp.com/blog
Talend - http://www.talend.com

Reply via email to