Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 26959|Відповідь: 0

[Джерело] Виклики Java до вебсервісного сервера C# не розпізнають значення HTTP-заголовка SOAPAction

[Копіювати посилання]
Опубліковано 2021-3-4 13:19:39 | | | |
Чому сервер звітів вебсервісу, який викликає C#, не розпізнає значення заголовка SOAPAction і завжди дозволяє C# змінювати його, лише тому, що C# потрібно додати лише тег, чому JAVA не може вказати запит на дію?



Публікація та дзвінок у веб-сервіс дуже прости, але все ж існують незначні проблеми, які підсумовуються так:

Java викликає веб-сервіс .net з помилкою «Server failed to authored the value of HTTP header SOAPAction».

Рішення:

Під час виклику вебсервісу SoapAction не вказано, RequestNameSpace не вказано, тому при запиті завжди з'являється «Сервер не розпізнав значення HTTP-заголовка SOAPAction».

Якщо використовуєте виклики Axis, викликайте їх так:


public static void main(String[] args) викидає Exception {  
    Не принести? Суфікс WSDL
    Кінцева точка рядка = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Створіть сервісний дзвінок     
  Service service = new Service();
  Створіть об'єкт виклику через сервіс
  Call call = (Call) service.createCall();   
  Встановіть URL, де розташований сервіс   
  call.setTargetEndpointAddress (new java.net.URL(endpoint));   
  qqCheckOnline — це метод "http://WebXml.com.cn/" на стороні мережі, який також звертає увагу на адресу простору імен і повідомляє про помилку, якщо ви його не принесете
  call.setOperationName (новий QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode також є назвою параметра методу .NET, який є назвою параметра qqCheckOnline
  call.addParameter (новий 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:будь-який 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