Skip to main content

XMLStreamException while invoking the web service running on JDK stack

1 reply [Last post]
vamo
Offline
Joined: 2012-05-08
Points: 0

I published Web Service using JAX-WS RI 2.1.6 in JDK 6. Platform Windows 2003 Enterprise. On linux same use case working.

After publishing the web service I am trying to invoke service using jboss-eap-5.0.0 GA as client and got the following exception.

java.io.IOException: java.io.IOException: An established connection was aborted by the software in your host machine
at com.sun.xml.internal.ws.server.SDDocumentImpl.writeTo(SDDocumentImpl.java:267)
at com.sun.xml.internal.ws.transport.http.HttpAdapter.publishWSDL(HttpAdapter.java:526)
at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:218)
at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:95)
at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:80)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65)
at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:65)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:68)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:555)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65)
at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:527)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: javax.xml.stream.XMLStreamException: java.io.IOException: An establis
hed connection was aborted by the software in your host machine
at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.close(XMLStreamWriterImpl.java:369)
at com.sun.xml.internal.ws.server.SDDocumentImpl.writeTo(SDDocumentImpl.java:265)

I disabled firewall, even after that I am getting above exception. I debugged this issue further, following are my findings
When we create the service object to invoke web service following things I observed

It invoke to WSHttpHandler. This WSHttpHandler calls HttpAdapter which is registered/created when we publish the Web Service. The WSHttpHandler is used to return the response for the given request. Before serving request it reads the WSDL file using SDDocumentImpl.wrteTo as follows

public void writeTo(PortAddressResolver portAddressResolver, DocumentAddressResolver resolver, XMLStreamWriter out) throws XMLStreamException, IOException {
for (SDDocumentFilter f : owner.filters) {
out = f.filter(this,out);
}
XMLStreamReader xsr = source.read();
try {
out.writeComment(VERSION_COMMENT);
new WSDLPatcher(owner.owner,this,portAddressResolver,resolver).bridge(xsr,out);
} finally {
xsr.close();
}
}
As per my understanding the "source.read()" not able to read WSDL file completely or read operation is timed out. As result above exception is thrown from "bridge" method, where XML parsing is happening line by line and writing it to the **XMLStreamWriter**.

The reason I am suspecting time out because when I am debugging issue by adding breakpoint in the the "bridge" method present in com.sun.xml.internal.ws.util.xml.XMLStreamReaderToXMLStreamWriter I do not get any exception.

Also, after above execution **com.sun.xml.internal.ws.transport.http.server.WSHttpHandler. handler** again invoked and in this run I do not encounter any exception. The WSDL file has been correctly read by XMLStreamReaderToXMLStreamWriter and service at client side is initialized. And I am able to invoke the web service.

Can any one please tell me why I am getting XMLStreamException ?

Reply viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
vamo
Offline
Joined: 2012-05-08
Points: 0

This reported exception is printed in the com.sun.xml.internal.ws.transport.http.server.WSHttpHandler as follows

/**
* Called by HttpServer when there is a matching request for the context
*/
public void handle(HttpExchange msg) {
try {
if (executor != null) {
// Use application's Executor to handle request. Application may
// have set an executor using Endpoint.setExecutor().
executor.execute(new HttpHandlerRunnable(msg));
} else {
handleExchange(msg);
}
} catch(Throwable e) {
// Dont't propagate the exception otherwise it kills the httpserver
e.printStackTrace();
}
}

Is this bug ? why we are not logging the exception instead of using e.printStackTrace()