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

Вид: 26959|Ответ: 0

[Источник] Java-вызовы веб-сервиса C# не распознают значение HTTP-заголовка SOAPAction

[Скопировать ссылку]
Опубликовано 2021-3-4 13:19:39 | | | |
Почему сервер отчётов веб-сервиса, вызывающий 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 клиентских кода, поэтому удаление трёх конструкторов, сообщавших об ошибках, также может решить вышеуказанные проблемы.

Перепечатано из:Вход по гиперссылке виден.




Предыдущий:.NET/C# использует BenchmarkDotNet для тестирования производительности кода
Следующий:Вызов интерфейса Consul HTTP API
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com