2015-09-18 2 views
1

Я написал метод, который генерирует мыло сообщение из Java строки:Генерирование SOAP-сообщение от Java Строка

private SOAPMessage createRequest(String msg) { 
    SOAPMessage request = null; 
    try { 
     MessageFactory msgFactory = MessageFactory.newInstance(); 
     request = factory.createMessage(); 

     SOAPPart msgPart = request.getSOAPPart(); 
     SOAPEnvelope envelope = msgPart.getEnvelope(); 
     SOAPBody body = envelope.getBody(); 

     StreamSource _msg = new StreamSource(new StringReader(msg)); 
     msgPart.setContent(_msg); 

     request.saveChanges(); 
    } catch(Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

И, после этого, я пытаюсь произвести какое-то сообщение. Например:

createRequest("test message"); 

Но здесь - request.saveChanges(); я ловлю это исключение: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Error during saving a multipart message

Где моя ошибка?

+2

Вы не читаете весь стек исключений, самая важная часть должна быть org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Содержимое не допускается в прологе, что означает, что ваш msg должен быть в действительности правильным XML. – Danio

ответ

0

Это потому, что вы не передаете правильный протокол отформатированное сообщение. В вашем коде не указан какой SOAP-протокол, который вы хотите использовать, что означает, что он создает фабрику сообщений для сообщений SOAP 1.1.

Таким образом, вам необходимо передать правильное сообщение SOAP1.1. я реплицировать свой метод, как это:

private static SOAPMessage createRequest(String msg) { 
     SOAPMessage request = null; 
     try { 
      MessageFactory msgFactory = MessageFactory 
        .newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); 
      request = msgFactory.createMessage(); 

      SOAPPart msgPart = request.getSOAPPart(); 
      SOAPEnvelope envelope = msgPart.getEnvelope(); 
      SOAPBody body = envelope.getBody(); 

      javax.xml.transform.stream.StreamSource _msg = new javax.xml.transform.stream.StreamSource(
        new java.io.StringReader(msg)); 
      msgPart.setContent(_msg); 

      request.saveChanges(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return request; 
    } 

и я называю его, используя эту строку:

String soapMessageString = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Header/><SOAP-ENV:Body></SOAP-ENV:Body></SOAP-ENV:Envelope>"; 
createRequest(soapMessageString); 

и это работает.

Смежные вопросы