I am creating a Soap client in java and I have a strange error.
Abstract customer
public abstract class AbstractSoapClient { private ServerContext context; private String path; private static final String WSSE = ""; private static final String CURL = ""; private static final String CURL_PASSWORD = ""; private static final String SECURITY_NODE = ""; private static final String USERNAME_TOKEN = ""; private static final String USERNAME_NODE = ""; private static final String PASSWORD_NODE = ""; public AbstractSoapClient(ServerContext context) { this.context = context; } protected SOAPMessage createRequest(String path) throws SOAPException { this.path = assembleEndpoint(path); SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); SOAPConnection soapConnection = soapConnectionFactory.createConnection(); SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), this.path); soapConnection.close(); return soapResponse; } protected void setCredentials(SOAPEnvelope envelope) throws SOAPException { SOAPHeader tHeader = envelope.getHeader(); Name tWsseHeaderName = envelope.createName(SECURITY_NODE, WSSE, CURL); SOAPHeaderElement tSecurityElement = tHeader.addHeaderElement(tWsseHeaderName); tSecurityElement.setMustUnderstand(false); Name tUserTokenElementName = envelope.createName(USERNAME_TOKEN, WSSE, CURL); SOAPElement tUserTokenElement = tSecurityElement.addChildElement(tUserTokenElementName); tUserTokenElement.removeNamespaceDeclaration(WSSE); tUserTokenElement.addNamespaceDeclaration("wsu", CURL);
Implement Soap Client
public class SoapClient extends AbstractSoapClient { public SoapClient(ServerContext context) { super(context); } @Override public SOAPMessage createSOAPRequest() throws SOAPException { MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage soapMessage = messageFactory.createMessage(); SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope envelope = soapPart.getEnvelope(); setCredentials(envelope); buildBody(envelope); soapMessage.saveChanges(); try { soapMessage.writeTo(System.out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return soapMessage; } private void buildBody(SOAPEnvelope envelope) throws SOAPException { envelope.addNamespaceDeclaration("sch", "------"); SOAPBody soapBody = envelope.getBody(); SOAPElement soapBodyElem = soapBody.addChildElement("sampleData", "sampleData"); SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("sampleData"); soapBodyElem1.addTextNode("sampleData"); SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("sampleData"); soapBodyElem2.addTextNode("sampleData"); SOAPElement soapBodyElem3 = soapBodyElem.addChildElement("sampleData"); soapBodyElem3.addTextNode("Y"); SOAPElement soapBodyElem4 = soapBodyElem.addChildElement("sampleData"); soapBodyElem4.addTextNode("sampleData"); SOAPElement soapBodyElem5 = soapBodyElem.addChildElement("sampleData"); soapBodyElem5.addTextNode("sampleData"); SOAPElement soapBodyElem6 = soapBodyElem.addChildElement("sampleData"); soapBodyElem6.addTextNode("sampleData"); } public static void main(String[] args) throws SOAPException, IOException { SoapClient client = new SoapClient( new ServerContext("url", "user", "password")); SOAPMessage response = client.createRequest("endpoint"); response.writeTo(System.out); } }
The strange point in this part of the code is:
try { soapMessage.writeTo(System.out); } catch (IOException e) {
If I comment on this code, which only prints the request before sending it, I get the following exception:
ago 12, 2016 12:58:17 PM com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post GRAVE: SAAJ0008: respuesta errรณnea; Not Found Exception in thread "main" com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (404Not Found at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:149) at AbstractSoapClient.createRequest(AbstractSoapClient.java:44) at SoapClient.main(SoapClient.java:67) Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (404Not Found at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:264) at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:145) ... 2 more CAUSE: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (404Not Found at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:264) at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:145) at AbstractSoapClient.createRequest(AbstractSoapClient.java:44) at SoapClient.main(SoapClient.java:67)
But if I do not comment on this line, I can get the answer correctly, for me it does not make sense, because why it sends 404Not Found if I do not write the request in the console before sending it.
source share