2012-11-28 5 views
12

मुझे आश्चर्य है कि स्ट्रिंग को SOAPMessage में कनवर्ट करने का कोई तरीका है?जावा में एक स्ट्रिंग को SOAPMessage में कनवर्ट करने के लिए कैसे करें?

मुझे कहते हैं कि मैं एक स्ट्रिंग के रूप में निम्नानुसार है:

String send = "<soap:Envelope xmlns:mrns0=\"http://sdp.SOMETHING.com/mapping/TSO\" xmlns:sdp=\"http://sdp.SOMETHING.com.tr/mapping/generated\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" 
     + "<soap:Header>" 
     + "<sdp:token>" 
     + "<sdp:sessionId>" + sessionId + "</sdp:sessionId>" 
     + "</sdp:token>" 
     + "<sdp:transaction-list>" 
     + "<sdp:transaction-id>" + 11 + "</sdp:transaction-id>" 
     + "</sdp:transaction-list>" 
     + "</soap:Header>" 
     + "<soap:Body>" 
     + "<sdp:SendSMSInput>" 
     + "<sdp:EXPIRY_DATE>" + extime + "</sdp:EXPIRY_DATE>" 
     + "<sdp:MESSAGE_CLASS>0</sdp:MESSAGE_CLASS>" 
     + "<sdp:S_DATE>" + time + "</sdp:S_DATE>" 
     + "<sdp:SHORT_NUMBER>1905</sdp:SHORT_NUMBER>" 
     + "<sdp:SRC_MSISDN>" + numSend + "</sdp:SRC_MSISDN>" 
     + "<sdp:TO_RECEIVERS>" 
     + "<sdp:msisdn>" + numSend + "</sdp:msisdn>" 
     + "</sdp:TO_RECEIVERS>" 
     + "<sdp:MESSAGE_BODY>" 
     + "<sdp:message>Message body here.</sdp:message>" 
     + "</sdp:MESSAGE_BODY>" 
     + "</sdp:SendSMSInput>" 
     + "</soap:Body>" 
     + "</soap:Envelope>"; 


जब मैं यह कर:

SOAPConnectionFactory sfc = SOAPConnectionFactory.newInstance(); 
    SOAPConnection connection = sfc.createConnection(); 
    InputStream is = new ByteArrayInputStream(send.getBytes()); 
    SOAPMessage request = MessageFactory.newInstance().createMessage(null, is); 
    request.removeAllAttachments(); 

    SOAPPart part = request.getSOAPPart(); 
    part.detachNode(); 
    SOAPEnvelope env = part.getEnvelope(); 
    env.detachNode(); 
    SOAPBody body = env.getBody(); 
    body.detachNode(); 
    SOAPHeader head = env.getHeader(); 
    head.detachNode(); 

    request.writeTo(System.out); 

    URL endpoint = new URL("http://sdp.somewhere.com.tr/view/LbsOpaqueService.wsdl"); 
    SOAPMessage response = connection.call(request, endpoint); 
    System.out.println(response.getContentDescription()); 

सब कुछ ठीक काम करता है। लेकिन मुझे अभी भी सर्वर से NULL मिल गया है। क्या कारण हो सकता है? मैंने < और> अक्षर से बचने के लिए बदल दिया है।

+1

आप इसे पार्स सकता है। या इसे पहले स्थान पर एक संदेश के रूप में बनाएं। –

उत्तर

26

स्ट्रिंग को एक इनपुट स्ट्रीम में कनवर्ट करें, फिर इसे एसओएपी संदेश कारखाने में पढ़ें।

InputStream is = new ByteArrayInputStream(send.getBytes()); 
SOAPMessage request = MessageFactory.newInstance().createMessage(null, is); 

You can read about how to do this here.

+0

बहुत बहुत धन्यवाद। एक और सवाल: जब मैं SOAPMessageRequest बनाता हूं तो यह स्वचालित रूप से शीर्षलेख और शरीर बना देगा। क्या मुझे अपनी स्ट्रिंग का कुछ हिस्सा बदलना है? –

+0

पहले से ही किया गया है, महोदय! लेकिन मैं इस बारे में उलझन में हूं कि किस हिस्से को निकालना है। –

2

यह मेरे लिए काम करता है:

SOAPMessage sm = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(new MimeHeaders(), is); 
+1

मैं हर संभव संयोजन की कोशिश कर, तीन दिनों के लिए कोशिश कर रहा था, हर बाइट डीबग करने का प्रयास करें। और हमेशा त्रुटि "शून्य सूचक अपवाद" प्राप्त करना अंत में मैंने आपके सुझाव की कोशिश की, और यह काम किया –

0

बजाय:

response.writeTo(System.out); 
01:

System.out.println(response.getContentDescription()); 

प्रतिक्रिया प्राप्त करने के बाद रेखा पालन करते हुए उसे बदलें

0

इस तरह आप एक फ़ाइल से पढ़ सकते हैं:

byte[] encoded = Files.readAllBytes(Paths.get("C:/resources/soap/RequestFileReply.xml")); 
InputStream bStream = new ByteArrayInputStream(encoded); 
SOAPMessage request = MessageFactory.newInstance().createMessage(null, bStream); 
SOAPBody body = request.getSOAPBody(); 
संबंधित मुद्दे