On Apr 11, 2014, at 11:53 AM, David Wiseman <[email protected]> wrote:
>
> Good point... you are correct, there is nothing about CXF in my classpath
> (see below). I suspect I should replace some or all of the Spring jars with
> CXF jars. Dumb question is there any advantage to running the CXF
> implementation over the Java jaxws implementation, like CXF is faster?
Well, CXF is certainly less buggy around the more complex use cases and is much
more secure as well.
> I could be totally wrong but I don't think my casting exception is related
> to the jaxws implementation.
Actually, it is. I’m not sure if the RI’s async methods handle the holder
things at all. I would definitely suggest trying with CXF. Either that or
try generating “Bare” style methods so the holders are not there.
Dan
>
> My feeling now is that I'm starting with the wrong approach, i.e., right
> from the WSDL definition I'm building from. As you can see in the code
> snippet below all parameters are mode.INOUT. In my mind this doesn't make
> sense for an asynchronous web service client, i.e., they should be IN only
> hence the Holder class won't be involved at least not for input parameters.
>
>
>
> NonStop Server Definition...
>
> SERVER PDDWSCLNTSRV
>
> PROCESSTYPE OSS
>
> ARGLIST -Xabend,-Xms128m,-Xmx128m,-Xoptgc,-Xverbosegc:file=stdout,
>
> -Xloggc:stderr,-Dsun.reflect.inflationThreshold=1,
>
> "-agentlib:jdwp=transport=dt_socket,address=8011,server=y,suspend=n",
>
> -Dlog4j.configuration=log4j.properties,-Dlog4j.debug,
>
> com.telus.health.pdd.access.DbRequestHandler
>
> AUTORESTART 0
>
> CREATEDELAY 10 SECS
>
> CWD /usr/health/drug/zcas
>
> DEBUG OFF
>
> DELETEDELAY 10 MINS
>
> ENV
> _RLD_LIB_PATH=/usr/tandem/javaexth10/lib:/usr/health/drug/common/log4j/lib
>
> ENV
>
>
> CLASSPATH=/usr/tandem/sash/spring311/dist/org.springframework.beans-3.1.1.RE
>
>
> LEASE.jar:/usr/tandem/sash/spring311/dist/org.springframework.context-3.1.1.
>
>
> RELEASE.jar:/usr/tandem/sash/spring311/dist/org.springframework.expression-3
>
>
> .1.1.RELEASE.jar:/usr/tandem/sash/spring311/dist/org.springframework.core-3.
>
>
> 1.1.RELEASE.jar:/usr/tandem/sash/spring311/dist/org.springframework.jdbc-3.1
>
>
> .1.RELEASE.jar:/usr/tandem/sash/spring311/dist/org.springframework.transacti
>
>
> on-3.1.1.RELEASE.jar:/usr/tandem/sash/spring311/dist/org.springframework.asm
>
>
> -3.1.1.RELEASE.jar:/usr/tandem/javaexth10/lib/tdmext.jar:/usr/tandem/java/jr
>
>
> e/lib/ext/util.jar:/usr/health/drug/common/commons-logging-1.1.1.jar:/usr/he
>
> alth/drug/common/commons-lang3-3.1.jar:/usr/health/drug/common/log4j/lib/log
>
>
> 4j-1.2.17.jar:/usr/health/drug/common/log4j/lib/pddlog4j2.jar:/usr/health/dr
>
> ug/zcas:/usr/health/drug/zcas/bin/PDDWSClntMngr.jar
>
> HIGHPIN ON
>
> HOMETERM \DNB1.$VDRG1
>
> LINKDEPTH 16
>
> MAXLINKS 16
>
> MAXSERVERS 2
>
> NUMSTATIC 1
>
> OWNER \DNB1.200,4
>
> PRI 170
>
> PROGRAM /usr/tandem/nssjava/jdk160_h60/jre/bin/java
>
> SECURITY "N"
>
> STDERR /usr/health/drug/zcas/pddWSsrv.err
>
> STDOUT /usr/health/drug/zcas/pddWSsrv.out
>
> TMF ON
>
> VOLUME \DNB1.$OSS.CASZOBEY
>
>
>
>
>
> Web Service Client Interface...
>
> /**
>
> * This class was generated by Apache CXF 2.7.2
>
> * 2014-04-10T10:49:44.965-04:00
>
> * Generated source version: 2.7.2
>
> *
>
> */
>
> @WebService(targetNamespace = "urn:AsyncDemo-interface", name =
> "portAsyncDemo")
>
> @XmlSeeAlso({ObjectFactory.class})
>
> public interface PortAsyncDemo {
>
>
>
> @RequestWrapper(localName = "AsyncDemo", targetNamespace =
> "urn:cpq_tns_AsyncDemo", className =
> "com.telus.health.pdd.asyncdemo.AsyncDemo")
>
> @ResponseWrapper(localName = "AsyncDemoResponse0", targetNamespace =
> "urn:cpq_tns_AsyncDemo", className =
> "com.telus.health.pdd.asyncdemo.AsyncDemoResponse0")
>
> @WebMethod(operationName = "AsyncDemo")
>
> public Response<com.telus.health.pdd.asyncdemo.AsyncDemoResponse0>
> asyncDemoAsync(
>
> @WebParam(mode = WebParam.Mode.INOUT, name = "client_no",
> targetNamespace = "urn:cpq_tns_AsyncDemo")
>
> javax.xml.ws.Holder<java.lang.String> clientNo,
>
> @WebParam(mode = WebParam.Mode.INOUT, name = "group_no",
> targetNamespace = "urn:cpq_tns_AsyncDemo")
>
> javax.xml.ws.Holder<java.lang.String> groupNo,
>
> @WebParam(mode = WebParam.Mode.INOUT, name = "cert_no",
> targetNamespace = "urn:cpq_tns_AsyncDemo")
>
> javax.xml.ws.Holder<java.lang.String> certNo
>
> );
>
> David
>
>
>
>
>
> -----Original Message-----
> From: Andrei Shakirin [mailto:[email protected]]
> Sent: April 11, 2014 06:40 AM
> To: [email protected]
> Subject: RE: Getting java.lang.ClassCast Exception: javax.xml.ws.Holder
> cannot be cast to java.lang.String
>
>
>
> Hi David,
>
>
>
> I do not see CXF in your stack trace. Are you sure that you have CXF jars in
> classpath?
>
> Actually it looks that you use default JDK jaxws implementation.
>
>
>
> Regards,
>
> Andrei.
>
>
>
>
>
>> -----Original Message-----
>
>> From: [email protected]<mailto:[email protected]>
>> [mailto:[email protected]]
>
>> Sent: Donnerstag, 10. April 2014 19:59
>
>> To: [email protected]<mailto:[email protected]>
>
>> Subject: Getting java.lang.ClassCast Exception: javax.xml.ws.Holder
>
>> cannot be cast to java.lang.String
>
>>
>
>> Hi CXF Community,
>
>>
>
>> I've been working with CXF for a several months now on a NonStop server.
>
>> I've built sychronous demo clients and servlets with no problems. I'm
>
>> now trying to build an asynchronous client but I can't seem to get
>
>> past the following ClassCastException which occurs as soon as I call...
>
>>
>
>> AsyncDemoResponse0 reply = asyncDemoResp.get();
>
>>
>
>> i.e., same point as GreetMeSometimeResponse reply =
>
>> greetMeSomeTimeResp.get(); from example page.
>
>>
>
>> Just like in the Async Consumer example page, wsl2java generates 3
>
>> method in the web service interface class, i.e., synchronous, polling and
>> callback.
>
>> When I invoke the synchronous form everything works fine.
>
>>
>
>> My thought is this is a newbie error but if this description is not
>
>> obvious, I can provide more information on advisement.
>
>>
>
>> Also note when I call my /Response<GreetMeSometimeResponse>
>
>> greetMeSomeTimeResp =
>
>> port.greetMeSometimeAsync(System.getProperty("user.name"));
>
>> /*equivalent*, namely, (/Response<AsyncDemoResponse0> asyncDemoResp =
>
>> asyncDemoPort.asyncDemoAsync(_asyncDemo_clientNo,
>
>> _asyncDemo_groupNo, _asyncDemo_certNo/); no activity is detected on
>
>> the servlet (service) side, i.e., nothing appears in the web server's
>> access.log.
>
>>
>
>> Any thought would be appreciated.
>
>>
>
>> =2014-04-10 13:50:18,485 ERROR [main] trace.event - Web Service
>
>> invocation error (javax.xml.ws.WebServiceException:
>
>> java.lang.ClassCastException: javax.xml.ws.Holder cannot be cast to
>
>> java.lang.String).
>
>> java.util.concurrent.ExecutionException: javax.xml.ws.WebServiceException:
>
>> java.lang.ClassCastException: javax.xml.ws.Holder cannot be cast to
>
>> java.lang.String
>
>> at
>
>> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
>
>> at java.util.concurrent.FutureTask.get(FutureTask.java:83)
>
>> at
>
>> com.telus.health.pdd.business.RddsReqProcessor.processRequest(RddsReqP
>
>> roc
>
>> essor.java:691)
>
>> at
>
>> com.telus.health.pdd.access.DbRequestHandler.processRequest(DbRequestH
>
>> an
>
>> dler.java:391)
>
>> at
>
>> com.telus.health.pdd.access.DbRequestHandler.main(DbRequestHandler.jav
>
>> a:1
>
>> 39)
>
>> Caused by: javax.xml.ws.WebServiceException: java.lang.ClassCastException:
>
>> javax.xml.ws.Holder cannot be cast to java.lang.String
>
>> at
>
>> com.sun.xml.internal.ws.client.AsyncInvoker.run(AsyncInvoker.java:59)
>
>> at
>
>> com.sun.xml.internal.ws.client.AsyncResponseImpl.run(AsyncResponseImpl
>
>> .java
>
>> :73)
>
>> at
>
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecu
>
>> tor.j
>
>> ava:886)
>
>> at
>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:
>
>> 908)
>
>> at java.lang.Thread.run(Thread.java:619)
>
>> Caused by: java.lang.ClassCastException: javax.xml.ws.Holder cannot be
>
>> cast to java.lang.String
>
>> at
>
>> com.telus.health.pdd.asyncdemo.AsyncDemo$JaxbAccessorF_certNo.set(Fiel
>
>> dA
>
>> ccessor_Ref.java:45)
>
>> at
>
>> com.sun.xml.internal.bind.v2.runtime.reflect.Accessor.setUnadapted(Acc
>
>> essor.j
>
>> ava:155)
>
>> at
>
>> com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$7.set(JAXBContextImpl.
>
>> java:926)
>
>> at
>
>> com.sun.xml.internal.ws.client.sei.BodyBuilder$DocLit.build(BodyBuilde
>
>> r.java:2
>
>> 07)
>
>> at
>
>> com.sun.xml.internal.ws.client.sei.BodyBuilder$JAXB.createMessage(Body
>
>> Build
>
>> er.java:88)
>
>> at
>
>> com.sun.xml.internal.ws.client.sei.SEIMethodHandler.createRequestMessa
>
>> ge(S
>
>> EIMethodHandler.java:204)
>
>> at
>
>> com.sun.xml.internal.ws.client.sei.AsyncMethodHandler$SEIAsyncInvoker.
>
>> do_ru
>
>> n(AsyncMethodHandler.java:147)
>
>> at
>
>> com.sun.xml.internal.ws.client.AsyncInvoker.run(AsyncInvoker.java:54)
>
>> ... 4 more
>
>>
>
>> Final note: the the only alteration I made to support asynchronous web
>
>> service on the service (servlet) side was the inclusion of
>
>> <async-supported>true</async-
>
>> supported> in the deplyment descriptor (web.xml).
>
>>
>
>> David
>
>>
>
>>
>
>>
>
>> --
>
>> View this message in context:
>
>> http://cxf.547215.n5.nabble.com/Getting-java-
>
>> lang-ClassCast-Exception-javax-xml-ws-Holder-cannot-be-cast-to-java-la
>
>> ng-
>
>> String-tp5742667.html
>
>> Sent from the cxf-user mailing list archive at Nabble.com.
--
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com