Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 26959|Отговор: 0

[Източник] Java повикванията към C# уеб сървъра не успяват да разпознаят стойността на HTTP заглавието SOAPAction

[Копирай линк]
Публикувано на 2021-3-4 13:19:39 | | | |
Защо сървърът за отчитане на уеб услуги, който извиква C#, не разпознава стойността на http хедъра SOAPAction и винаги позволява на C# да я променя, само защото C# трябва само да добави таг, защо JAVA не може да зададе заявка за действие?



Публикуването и обаждането на Webservice е много просто, но все още има дребни проблеми, които са обобщени по следния начин:

Java извиква webService на .net с грешка "Server failed to authored the value of HTTP header SOAPAction".

Решение:

При извикване на уеб услуга не е посочено SoapAction, не е посочено RequestNameSpace, така че "Сървърът не успя да разпознае стойността на HTTP хедъра SOAPAction" винаги се появява при заявка.

Ако използвате Axis calls, извикайте ги по следния начин:


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 да извиква webService на .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 refs, защото <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