SOAP 1.2 с Axis 2 не анализируется - PullRequest
0 голосов
/ 29 июля 2010

Я пишу сервер, который получает сообщения SOAP 1.2.У меня проблема в том, что когда я отправляю через SOAPui сообщение SOAP 1.1, сообщение обрабатывается правильно, но не тогда, когда это сообщение SOAP 1.2.Я использую axis2.

Вот моя зависимость POM:

  <dependencies>
    <dependency>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2-saaj</artifactId>
        <version>1.4.1</version>
    </dependency>
  </dependencies>

Вот моя основная процедура для запуска сервера.Это не фактический сервер (без потока), цель - показать проблему.

public class App {
    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(3400);
            Socket socket = server.accept();
            BasicHttpParams params = new BasicHttpParams();
            DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
            conn.bind(socket, params);
            HttpRequest request = conn.receiveRequestHeader();
            if (request instanceof HttpEntityEnclosingRequest) {
                conn.receiveRequestEntity((HttpEntityEnclosingRequest) request);
                HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
                if (entity != null) {
                    MessageFactory soapMessageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
                    SOAPMessage soapMessage = soapMessageFactory.createMessage(
                            new MimeHeaders(), entity.getContent());
                    SOAPBody soapBody = soapMessage.getSOAPBody();
                    entity.consumeContent();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Сообщение SOAP 1.1

<?xml version='1.0' encoding='utf-8'?>
<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:Header/>
    <soapenv:Body>
    </soapenv:Body>
</soapenv:Envelope>

Сообщение SOAP 1.2

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
    </soapenv:Body>
</soapenv:Envelope>

Исключение, полученное с сообщением 1.2

javax.xml.soap.SOAPException: org.apache.axiom.soap.SOAPProcessingException: Disallowed element found inside Envelope : {http://www.w3.org/2003/05/soap-envelope}Body
    at org.apache.axis2.saaj.SOAPPartImpl.<init>(SOAPPartImpl.java:228)
    at org.apache.axis2.saaj.SOAPPartImpl.<init>(SOAPPartImpl.java:246)
    at org.apache.axis2.saaj.SOAPMessageImpl.<init>(SOAPMessageImpl.java:99)
    at org.apache.axis2.saaj.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:131)
    at lolissimo.xhiara.App.main(App.java:33)

Ответы [ 3 ]

2 голосов
/ 12 января 2012

Я получил ту же ошибку, когда пытался получить доступ к весеннему фреймворку WS.

Итак, после нескольких намерений и исправлений для настройки выходного XML, наконец я получил этот uri "http://www.w3.org/2003/05/soap-envelope" вместо "http://schemas.xmlsoap.org/soap/envelope/",

Таким образом, изменение спецификации протокола от 1.2 до 1.1 решило проблему:

MessageFactory.newInstance();

вместо:

MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);

В обоих случаях вы все равно можете настроить свои префиксыи пространства имен.И, если вы пытаетесь использовать пружинный WS, не забудьте включить префикс "soapenv" в свой конверт.

1 голос
/ 13 ноября 2014

Я получаю ошибку WSWS4104E: A SOAP 1.2 Protocol is not supported by SAAJ 1.2. при попытке подключиться к существующей веб-службе с конечной точкой WSDL. Было замечено, что специфика IBM jar не входит в путь классов. Файл jar: com.ibm.jaxws.thinclient_8.0.0.jar.

Имя переменной WAS_V8JAXWS_WEBSERVICES_THINCLIENT. После добавления этой переменной в Java Build Path я больше не вижу эту ошибку.

Также ссылка на другую версию: http://www -01.ibm.com / support / docview.wss? Uid = swg21316678

1 голос
/ 29 июля 2010

Вы должны попробовать с официальной реализацией SAAJ .

<dependency>
    <groupId>com.sun.xml.messaging.saaj</groupId>
    <artifactId>saaj-impl</artifactId>
    <version>1.3.4</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
...