Any chance you can capture wire traces of the soap messages going to/from
2.0.2 and 2.0.4? That will probably provide the best clue as to what's
happening.
I notice you aren't using a wsdl. Thus, one possible culprit is that
2.0.4 now honors any @XmlSchem(elementFormDefault=) annotation that
you may have in a package-info.java. Thus, it may be sending out the
message in a different qualification form than it did previously. The
wiretraces would help diagnose that.
Dan
On Thursday 21 February 2008, Holger Stolzenberg wrote:
We are using CXF for a shop backend. After we upgraded from 2.0.2 -
2.0.4 the unit tests (TestNG) for the CXF services all fail with the
same exception like the one below:
FAILED: testSaveCustomer
javax.xml.ws.soap.SOAPFaultException: Could not send Message.
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:175
) at $Proxy78.saveCustomer(Unknown Source)
at
com.ewerk.shop.backend.wsapi.customer.CustomerServiceTest.testSaveCust
omer(CustomerServiceTest.java:246) Caused by:
org.apache.cxf.interceptor.Fault: Could not send Message. at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndin
gInterceptor.handleMessage(MessageSenderInterceptor.java:64) at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercepto
rChain.java:208) at
org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276) at
org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222) at
org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135
) ... 24 more
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:652)
at
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConn
ection.java:1000) at
java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRe
sponse(HTTPConduit.java:1863) at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HT
TPConduit.java:1791) at
org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOut
putStream.java:47) at
org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:157
) at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66
) at
org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:575)
at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndin
gInterceptor.handleMessage(MessageSenderInterceptor.java:62) ... 29
more
The services STILL just work fine from the backend system (a webapp),
only the tests fail.
--
---
-
The unit test setup is the following:
Maven dependencies: cxf-rt-frontend-jaxws, cxf-rt-transports-http
(2.0.4)
SNIP Service interface
@WebService( name = CustomerService )
public interface ICustomerService
{
@WebMethod( operationName = saveCustomer )
@WebResult( name = saveCustomerResult )
public BackendServiceStatus saveCustomer( @WebParam( name =
auth )
ServiceAuthentication auth, @WebParam( name = customer ) Customer
customer ); }
/SNIP
SNIP CXF Server
JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean ();
sf.setServiceClass( ICustomerService.class );
sf.setServiceBean( getServiceImplementation() ); -- returns the
service impl bean from spring context ('CustomerServiceImpl')
sf.setAddress(
http://localhost:8080/Shop_Backend/wsapi/CustomerService; );
// additionally setup JAXB context
Server server = sf.create();
/SNIP
SNIP CXF Client
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass( ICustomerService.class );
factory.setAddress(
http://localhost:8080/Shop_Backend/wsapi/CustomerService; );
ICustomerService client = (ICustomerService)factory.create();
// call service
BackendServiceStatus status = customerServiceProxy.saveCustomer(
auth, customer );
/SNIP
SNIP spring context
bean id=CustomerServiceImpl
class=com.ewerk.shop.backend.wsapi.customer.CustomerServiceImpl /
jaxws:server id=CustomerService
serviceBean=#CustomerServiceImpl
address=/CustomerService
/jaxws:server