8
votes

La savon donnée ne correspond pas à une opération

Je suis nouveau au service Web à l'aide de JAX-WS. Je commençais à la mettre en œuvre en fonction de certains types de tutoriels sur le Web. De plus, j'essayais d'accéder à ce service via mon client Android, alors j'appelais cela. XXX Pré>

Mais je reçois cette erreur lorsque j'essaie d'imprimerstacktrace. P>

<wsdl:definitions xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.my/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="HelloServiceImplService" targetNamespace="http://service.my/">
<wsdl:types>
<xs:schema xmlns:tns="http://service.my/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="http://service.my/" version="1.0">
<xs:element name="sayHello" type="tns:sayHello"/>
<xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/>
<xs:complexType name="sayHello">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="sayHelloResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="sayHelloResponse">
<wsdl:part element="tns:sayHelloResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="sayHello">
<wsdl:part element="tns:sayHello" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:portType name="HelloService">
<wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello" name="sayHello"></wsdl:input>
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="HelloServiceImplServiceSoapBinding" type="tns:HelloService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="sayHello">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="sayHello">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="sayHelloResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HelloServiceImplService">
<wsdl:port binding="tns:HelloServiceImplServiceSoapBinding" name="HelloServiceImplPort">
<soap:address location="http://192.168.0.102:8080/TestWS/myService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


0 commentaires

4 Réponses :


2
votes

Votre SOAP doit ressembler à ceci: {http://service.my/} Sayhello Si vous le spécifiez comme suit: http: // service.my/sayhello CXF ne comprend pas qu'il s'agit d'une action, cela ressemble plus à un espace de nom, pas une action.

Modifier ceci: xxx

dans ceci: xxx

et il devrait fonctionner.


0 commentaires

16
votes

Selon votre WSDL:

<soap:operation soapAction="" style="document"/>


0 commentaires

1
votes

J'ai rencontré un problème similaire comme "la soapaction donnée ... ne correspond pas à une opération" lors de l'utilisation de CXF JAX-WS. Si vous utilisez le proxy JAX-WS comme ci-dessous

org.apache.cxf.endpoint.Client proxy = ClientProxy.getClient(port);
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("SOAPAction", Arrays.asList(""));
proxy.getRequestContext().put(Message.PROTOCOL_HEADERS, headers);


0 commentaires

0
votes

J'ai reçu ce message quand j'ai utilisé System.net.WebClient. La savon a été envoyée dans l'en-tête et j'ai réutilisé le client pendant 2 opérations avant de disposer, donc sur le deuxième appel, il a envoyé 2 actions ... CLEAR () Avant chaque appel résolu le problème.


0 commentaires