2010-07-29 8 views
0

J'écris un serveur qui reçoit des messages SOAP 1.2. Le problème est que lorsque j'envoie via SOAPui un message SOAP 1.1, le message est correctement géré mais pas quand il s'agit d'un message SOAP 1.2. J'utilise axis2.SOAP 1.2 avec l'axe 2 n'est pas analysé

Voici ma dépendance POM:

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

Voici ma routine principale pour exécuter le serveur. Ce n'est pas le serveur réel (pas de fil), le but est de montrer le problème.

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 Message

<?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 Message

<?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> 

L'exception que je suis arrivé avec le 1.2 Message

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) 

Répondre

1

Vous devriez essayer la mise en œuvre officielle de 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> 
1

J'ai eu la même erreur quand j'ai essayé d'accéder à un cadre de ressort WS. Donc, après plusieurs intentions et correctifs pour personnaliser la sortie XML, Finalement, je recevais cet uri "http://www.w3.org/2003/05/soap-envelope" au lieu de "http://schemas.xmlsoap.org/soap/envelope/".

Ainsi, chanching la spécification du protocole du 1.2 au 1.1 a résolu le problème:

MessageFactory.newInstance(); 

au lieu de:

MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); 

Dans les deux cas, vous pouvez toujours personnaliser vos préfixes et espaces de noms. Et, si vous essayez de consommer un WS de printemps, n'oubliez pas d'inclure le préfixe "soapenv" dans votre enveloppe.

1

Je recevais erreur WSWS4104E: A SOAP 1.2 Protocol is not supported by SAAJ 1.2. lors d'une tentative de connexion à un service Web existant avec un point de terminaison WSDL. Il a été observé que le jar spécifique à IBM n'était pas dans le chemin de la classe. Le fichier jar est com.ibm.jaxws.thinclient_8.0.0.jar.

Le nom de la variable est WAS_V8JAXWS_WEBSERVICES_THINCLIENT. Après avoir ajouté cette variable à Java Build Path, je ne vois plus cette erreur.

Egalement un lien vers l'autre version: http://www-01.ibm.com/support/docview.wss?uid=swg21316678