System property "javax.xml.soap.MessageFactory" for two different soap versions

I need to contact two web services from my application. For one web service, I need to use the soap1_1 version, and for the other soap version, soap1_2. In this case, the value for the system property "javax.xml.soap.MessageFactory" must be set

Client 1:

public class SoapClient1 { protected static Logger _logger = Logger.getLogger ("TEST"); private static Long retryDelay = null; public String sendSoapMessage (String xml) throws Exception { SOAPMessage resp = null; String response = null; String endpoint = "http:xxxx"; System.setProperty("javax.xml.soap.MessageFactory","com.sun.xml.internal.messaging.saaj.soap.ver1_2.SOAPMessageFactory1_2Impl"); SOAPConnectionFactory connectionFactory = SOAPConnectionFactory.newInstance(); SOAPConnection soapConnection = connectionFactory.createConnection(); long start = System.currentTimeMillis(); long end = System.currentTimeMillis(); //URL endPoint = new URL(endpoint); //setting connection time out and read timeout URL endPoint = new URL (null, endpoint, new URLStreamHandler () { @Override protected URLConnection openConnection (URL url) throws IOException { URL clone = new URL (url.toString ()); URLConnection connection = clone.openConnection (); connection.setConnectTimeout (60000); connection.setReadTimeout (60000); // Custom header return connection; }}); try{ start = System.currentTimeMillis(); resp = soapConnection.call(getSoapRequest(xml), endPoint); end = System.currentTimeMillis(); ByteArrayOutputStream os = new ByteArrayOutputStream(); resp.writeTo(os); response = os.toString(); if (!resp.getSOAPBody().hasFault()) { response = "SucCess:" + response; }else{ response = "FaiLure:" + response; } }else{ response = "FaiLure:" + response; } }catch(SOAPException se){ _logger.log(Level.ERROR," Service Provisioning Call Failed"); _logger.log(Level.ERROR,"The call duration before SOAPException =" +(end-start)+" ms."); se.printStackTrace(); throw se; } soapConnection.close(); return response; } private SOAPMessage getSoapRequest(String xml) throws SOAPException,Exception{ MessageFactory mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); /* Create a SOAP message object. */ SOAPMessage soapMessage = mf.createMessage(); SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope soapEnvelope = soapPart.getEnvelope(); SOAPBody soapBody = soapEnvelope.getBody(); soapEnvelope.getHeader().detachNode(); soapEnvelope.addNamespaceDeclaration("soap","http://yyyy"); SOAPHeader header = soapEnvelope.addHeader(); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); builderFactory.setNamespaceAware(true); InputStream stream = new ByteArrayInputStream(xml.getBytes()); Document doc = builderFactory.newDocumentBuilder().parse(stream); _logger.log(Level.DEBUG, "Adding SOAP Request Body"); soapBody.addDocument(doc); soapMessage.saveChanges(); return soapMessage; } } 

sample request

 <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soap="http://bridgewatersystems.com/xpc/tsc/entity/soap"> <env:Header/> <env:Body> <TempTierChangeRequest xmlns="http://bridgewatersystems.com/xpc/tsc/entity/soap" credentials="root" principal="root"> <temp-tier-change xmlns=""> <service-components> <service-component name="DSL_Tier_2"/> </service-components> <duration-sec>300</duration-sec> <description>1024 SC</description> <activation-date>2017-02-09T10:29:16</activation-date> <subscriber-id> 26752018010@wholesale1.com </subscriber-id> <partition-key>26752018010</partition-key> <ttc-id>3706043</ttc-id> <validity-period> <duration>30</duration> <expires-with-billing-reset>1</expires-with-billing-reset> </validity-period> </temp-tier-change> </TempTierChangeRequest> </env:Body> </env:Envelope> 
+7
java web-services system-properties soap-client
source share
1 answer

Cannot set javax.xml.soap.MessageFactory System Variable for two different purposes. The default value is set for SOAP 1.1

Remove the system property javax.xml.soap.MessageFactory and depending on the type of client you are using

Building a Soap Message Using MessageFactory.newInstance()

If you want to use SOAP1.1, use the default constructor

  MessageFactory factory = MessageFactory.newInstance(); 

If you want to use SOAP1.2, use

 MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); 

See the Java Tutorial .

JAX-WS clients configured with @BindingType annotations

@BindingType used when the JAX-WS client is configured using annotations, for example, if the client is created from WSDL. Annotations are added to the port to establish binding to SoapBinding.SOAP11HTTP_BINDING or SoapBinding.SOAP12HTTP_BINDING .

 @WebService(targetNamespace = "https://myservice.services.com", name = "myserviceProxyProt") @BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING) public interface MyServiceProxyPort { 
+3
source share

All Articles