Защо сървърът за отчитане на уеб услуги, който извиква 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 клиентски кода, така че премахването на трите конструктора, които докладват грешки, също може да реши горните проблеми.
Препечатано от:Входът към хиперлинк е видим.
|