Я решил эту проблему, просмотрев файл WSDL и, где возможно, разбил элементы на простые примитивы типов и соответственно обновил ссылки между XML-элементами.
Я не уверен, почему это работает, но оно все равно решило мою проблему.
Если у вас есть сложный атрибут, как вы могли бы это сделать
До
<xs:element name="getMyMenu">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="number" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="var2" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="var3" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="var4" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
После
<xs:complexType name="getMyMenu">
<xs:sequence>
<xs:element minOccurs="0" name="number" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="var2" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="var3" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="var4" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
И затем измените это
<wsdl:message name="getMyMenuRequest">
<wsdl:part name="parameters" type="ns0:getUssdMenu"/>
</wsdl:message>
к
<wsdl:message name="getMyMenuRequest">
<wsdl:part name="parameters" type="ns:getUssdMenu"/>
</wsdl:message>
Это должно быть! Он сделал это для меня ....
Это просто догадка, но, возможно, у вас проблема с пространством имен. Если вы сосредоточитесь на этой части wsdl, обратите внимание, что у вашего параметра есть пространство имен «ns0» для элементов, но в ваших операциях, определенных позже, похоже, что вы используете пространство имен «axis2». Со всеми моими WSDL с Axis2 эти два пространства имен одинаковы.
<wsdl:message name="GetMessagesRequest">
<wsdl:part name="parameters" element="ns0:GetMessages"/>
</wsdl:message>
<wsdl:message name="GetMessagesResponse">
<wsdl:part name="parameters" element="ns0:GetMessagesResponse"/>
</wsdl:message>
<wsdl:message name="GetGroupsRequest">
<wsdl:part name="parameters" element="ns0:GetGroups"/>
</wsdl:message>
<wsdl:message name="GetGroupsResponse">
<wsdl:part name="parameters" element="ns0:GetGroupsResponse"/>
</wsdl:message>
<wsdl:portType name="MyProjectPortType">
<wsdl:operation name="GetMessages">
<wsdl:input message="axis2:GetMessagesRequest" wsaw:Action="urn:GetMessages"/>
<wsdl:output message="axis2:GetMessagesResponse" wsaw:Action="urn:GetMessagesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetGroups">
<wsdl:input message="axis2:GetGroupsRequest" wsaw:Action="urn:GetGroups"/>
<wsdl:output message="axis2:GetGroupsResponse" wsaw:Action="urn:GetGroupsResponse"/>
</wsdl:operation>
</wsdl:portType>
Еще одна вещь, которую вы можете проверить, - проверить, что wsdl, полученный вами из java2wsdl, является тем же, который генерируется осью2. Если вы не изменили настройку по умолчанию «useoriginalwsdl» в ваших services.xml, эти wsdls могут «выглядеть» иначе. Мне никогда не приходилось вручную запускать java2wsdl, чтобы мой веб-сервис работал правильно ...
Таким образом, в основном, нажмите URL-адрес службы в браузере и нажмите на «wsdl» в конце URL-адреса ... вы должны получить wsdl для сравнения.
Кроме того, попросите своего клиента сгенерировать заглушки из wsdl сервера вместо того, который создается java2wsdl (если вы первоначально использовали wsdl из java2wsdl). Опять же, нам никогда не приходилось передавать созданный вручную wsdl кому-либо ... они просто просто потребляли динамически сгенерированный с сервера ...
Вы пытались отправить такой запрос?
<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<request>
<GetGroups xmlns="http://stws/xsd">
<serialcode>123456-654321</serialcode>
</GetGroups>
</request>
</soap:Body>
</soap:Envelope>
Все мои запросы имеют тег запроса перед действительными параметрами запроса.