Hi all,
In a nutshell I seem to be able pull data from a .Net based web service
but when I try push the same data back I'm getting an error. Here's
what's happening...
Have created Java classes using wsdltojava using the published wsdl for
the service. e.g. the service is accessed with...
SalesOrderService service = new
SalesOrderService(SALES_ORDER_SERVICE_URL, SALES_ORDER_SERVICE_NAME);
SalesOrderServiceSoap soapService =
service.getSalesOrderServiceSoap();
I can call methods that return complex data types without any problem. e,g,
SalesOrderDataSetType dataSet = soapService.getById(orderNum);
An error occurs when I try to pass the same dataset back as an input
parameter to another method. e.g.
SalesOrderDataSetType dataSet =
soapService.getNewOrderDtl(*dataSet*, orderNum);
This returns the stack trace...
java.lang.NullPointerException
at
org.apache.cxf.interceptor.ClientFaultConverter.processFaultDetail(ClientFaultConverter.java:72)
at
org.apache.cxf.interceptor.ClientFaultConverter.handleMessage(ClientFaultConverter.java:65)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:206)
at
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:86)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:178)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:57)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:206)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:399)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1830)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1698)
at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:206)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:253)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:204)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
at $Proxy39.getNewOrderDtl(Unknown Source)
Not very helpful... but here's some more clues...
I was previously trying to do this with XFire and was getting an error
at the same point in the code...
org.codehaus.xfire.XFireRuntimeException: Could not invoke service..
Nested exception is org.codehaus.xfire.fault.XFireFault: String was not
recognized as a valid DateTime.; at System.DateTime.ParseExact(String
s, String[] formats, IFormatProvider provider, DateTimeStyles style)
at System.Xml.XmlConvert.ToDateTime(String s, String[] formats)
at System.Xml.XmlConvert.ToDateTime(String s)
This suggests there is a problem with the date format being sent to the
webservice. So I've tried to look at what is being sent using tools
like TcpMon but can only see the GET requests for the WSDL - I cannot
set any requests or responses associated with the methods being called.
Should I be looking at a port other than 80?
If you can suggest either a solution or a way to monitor the requests
and responses I'd really appreciate it.
thanks
Phil