When SOAPConnection.call(SOAPMessage, String) fails with no connection established,
it returns a message with Fault. Then, Transformer.transform(reply.getSOAPPart().getContent())
fails with,
javax.xml.transform.TransformerException: Source object passed to ''{0}'' has no contents.
. Strangely, if Transformer.transform(new DOMResult(reply.getSOAPPart())) is called beforehand
(this call fails with same exception), subsequent transform() succeeds.
Sample code, soap.java, is Listing 1.
Exception stack trace is Listing 2.
message.writeTo() of the original message is Listing 3.
reply.writeTo() is Listing 4.
==== Listing 1
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
public class soap {
public void run() throws Exception {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage m = mf.createMessage();
SOAPEnvelope e = m.getSOAPPart().getEnvelope();
SOAPBody b = e.getBody();
b.addBodyElement(e.createName("Hi", "hi", "urn:Hi"));
m.writeTo(System.out);
System.out.println();
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection c = scf.createConnection();
SOAPMessage r = c.call(m, "
http://localhost:40000");
r.writeTo(System.out);
System.out.println();
StreamResult result = new StreamResult(System.out);
Transformer t = TransformerFactory.newInstance().newTransformer();
try { // this try-catch clause is the work-around
t.transform(new DOMSource(r.getSOAPPart()), new DOMResult());
} catch (TransformerException ignored) {}
t.transform(r.getSOAPPart().getContent(), result);
System.out.println();
}
public static void main(String[] args) throws Exception {
try {
soap soap = new soap();
soap.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}
==== Listing 2
javax.xml.transform.TransformerException: Source object passed to ''{0}'' has no contents.
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:602)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:642)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:281)
at soap.run(soap.java:32)
at soap.main(soap.java:40)
==== Listing 3
<soapenv:Envelope xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="
http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><hi:Hi xmlns:hi="urn:Hi"/></soapenv:Body></soapenv:Envelope>
==== Listing 4
<soapenv:Envelope xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="
http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server.userException</faultcode><faultstring>java.net.ConnectException: Connection refused</faultstring><detail><ns1:stackTrace xmlns:ns1="
http://xml.apache.org/axis/">java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:516)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:153)
at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:120)
at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:1870)
at org.apache.axis.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:90)
at soap.run(soap.java:21)
at soap.main(soap.java:40)
</ns1:stackTrace><ns2:hostname xmlns:ns2="
http://xml.apache.org/axis/">chollo</ns2:hostname></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>