Почему сервер отчётов веб-сервиса, вызывающий C#, не распознаёт значение заголовка SOAPAction в http и всегда позволяет C# его менять, только потому, что C# нужно добавить только тег, почему JAVA не может указать запрос действия?
Публикация и вызов в веб-сервис очень просты, но всё же есть незначительные проблемы, которые кратко описываются следующим образом:
Java вызывает веб-сервис .net с ошибкой «Server failed to identify the value of HTTP header SOAPAction».
Решение:
При вызове веб-сервиса SoapAction не указана, RequestNameSpace не указана, поэтому при запросе всегда появляется сообщение «Сервер не распознал значение HTTP-заголовка SOAPAction».
Если используете вызовы Axis, вызывайте их следующим образом:
public static void main(String[] args) бросает исключение { Не принесёшь? Суффикс WSDL Конечная точка строки = «http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx»; Создайте сервисный вызов Service service = new Service(); Создать объект вызова через сервис Call call = (Звонок) service.createCall(); Укажите URL, где находится сервис call.setTargetEndpointAddress (new java.net.URL(endpoint)); qqCheckOnline — это метод «http://WebXml.com.cn/» на стороне сети, который также обращает внимание на адрес пространства имён и также сообщает об ошибке, если вы его не принесёте call.setOperationName (new QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode также является названием параметра метода .NET, который является именем параметра qqCheckOnline call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Избегайте вызова Java к веб-сервису .net с ошибкой «Сервер не распознал значение HTTP-заголовка SOAPAction» call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Тип возвращаемого параметра call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Также стоит отметить, что нужно добавить вызванный метод, иначе ошибка тоже будет зафиксирована Массивы объектов инкапсулируют параметры String ret = (Строка) call.invoke(new Object[] {"aaaaaa"}); System.out.println("--------"+ret); } Обратите внимание на раздел комментариев.
Вход по гиперссылке виден.? WSDL расшифровывается как Public Web Service (Публичная веб-служба)
Следующее исключение возникает, когда wsdl2java.bat, использующий CXF, генерирует клиент для публикации веб-сервиса .net на основе файла wsdl
(объявление неопределённого элемента 's:schema') Решение:
Откройте wsdl.xml и используйте
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Эта ошибка генерации wsdl2java должна быть связана с тем, что JAXB не поддерживает xml-ссылки, потому что <s:any minOccurs="2" maxOccurs="2"/>, а <s:element ref="s:schema" /><s:any/> фактически эквивалентны. <s:element ref="s:schema" /> на самом деле означает, что вы можете использовать любой тип элемента, указанный s:schema здесь, <s:any /> играет эту роль, <s:any minOccurs="2" maxOccurs="2"/> — это просто две <s:any /> Это было написано в одном предложении.
ссылкаВход по гиперссылке виден.
Использование CXF wsdl2java.bat генерирует суперошибку компиляции клиента на основе файла wsdl
Решение:
Она не компилируется корректно, потому что спецификация jax-ws2.2 конфликтует с java6.
Однако программу нельзя скомпилировать только на java5, поэтому необходимо снизить версию спецификации jax-ws, которую можно обработать следующим образом: Выполнить команду
WSDL2Java -frontend jaxws21 -client *.xml Таким образом, код, сгенерированный с помощью jax-ws2.1, может быть скомпилирован и выполнен на java6.
Я сравнил клиентский код, сгенерированный инструментом, с текстовым сравнением и обнаружил, что последний генерирует ещё 3 клиентских кода, поэтому удаление трёх конструкторов, сообщавших об ошибках, также может решить вышеуказанные проблемы.
Перепечатано из:Вход по гиперссылке виден.
|