Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 26959|Odpowiedź: 0

[Źródło] Wywołania Java do serwera usług C# nie rozpoznają wartości nagłówka HTTP SOAPAction

[Skopiuj link]
Opublikowano 2021-3-4 o 13:19:39 | | | |
Dlaczego serwer raportujący usługi sieciowej, który wywołuje C#, nie rozpoznaje wartości nagłówka http SOAPAction i zawsze pozwala C# ją zmieniać? Tylko dlatego, że C# musi dodać tylko tag, dlaczego JAVA nie może określić żądania akcji?



Publikowanie i wywoływanie Webservice jest bardzo proste, ale wciąż występują drobne problemy, które podsumowano następująco:

Java wywołuje usługę webową .net z błędem "Serwer nie rozpoznał wartości nagłówka HTTP SOAPAction".

Rozwiązanie:

Podczas wywoływania usługi webowej nie jest określana żadna SoapAction, nie jest określana przestrzeń RequestNameSpace, więc "Serwer nie rozpoznał wartości nagłówka HTTP SOAPAction" zawsze pojawia się podczas żądania.

Jeśli używasz wywołań Osi, wywołaj je następująco:


public static void main(String[] args) rzuca Exception {  
    Nie przynosisz? Przyrostek WSDL
    Koniec ciągu = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Utwórz połączenie serwisowe     
  Usługa = nowa usługa();
  Utwórz obiekt wywołania przez usługę
  Wywołanie wywołania = (Wywołanie) service.createCall();   
  Ustaw adres URL, gdzie znajduje się usługa   
  call.setTargetEndpointAddress(new java.net.URL(endpoint));   
  qqCheckOnline to metoda "http://WebXml.com.cn/" po stronie sieci, która również zwraca uwagę na adres przestrzeni nazw i zgłasza błąd, jeśli jej nie wyświetlisz
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode to także nazwa parametru metody .NET, która jest nazwą parametru qqCheckOnline
  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Unikaj wywoływania usługi webService .net przez Javę z błędem "Serwer nie rozpoznał wartości nagłówka HTTP SOAPAction"
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Typ parametru zwracanego
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Należy również zauważyć, że trzeba dodać metodę, którą ma się wywołać, bo inaczej zostanie zgłoszony błąd
  Matryce obiektów enkapsulują parametry     
  String ret = (String) call.invoke(new Object[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Zwróć uwagę na sekcję komentarzy.

Logowanie do linku jest widoczne.? WSDL oznacza Public Web Service

Następujący wyjątek występuje, gdy wsdl2java.bat korzystający z CXF generuje klienta do publikacji usługi sieciowej .net opartej na pliku wsdl


( deklaracja nieokreślonego elementu 's:schema')

Rozwiązanie:

Otwórz wsdl.xml i użyj


<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any />
Ten błąd generowania wsdl2java powinien być związany z tym, że JAXB nie obsługuje xml refs, ponieważ <s:any minOccurs="2" maxOccurs="2"/> oraz <s:element ref="s:schema" /><s:any/> są w rzeczywistości równoważne. <s:element ref="s:schema" /> oznacza, że możesz użyć dowolnego typu elementu określonego przez s:schema tutaj, <s:any /> pełni tę rolę, <s:any minOccurs="2" maxOccurs="2"/> to po prostu dwa <s:dowolny />

Było to napisane w jednym zdaniu.

odniesienieLogowanie do linku jest widoczne.

Użycie wsdl2java.bat CXF generuje superbłąd kompilacji klienta na podstawie pliku wsdl

Rozwiązanie:

Nie kompiluje się poprawnie, ponieważ specyfikacja jax-ws2.2 koliduje z java6.

Jednak program nie może być kompilowany wyłącznie w java5, dlatego konieczne jest obniżenie wersji specyfikacji jax-ws, którą można obsłużyć w następujący sposób: Wykonaj polecenie

WSDL2Java -frontend Jaxws21 -client *.xml

W ten sposób kod wygenerowany w jax-ws2.1 może być kompilowany i wykonywany w java6.

Porównałem kod klienta generowany przez narzędzie z porównaniem tekstu i stwierdziłem, że to drugie generowało 3 dodatkowe kody klienckie, więc usunięcie 3 konstruktorów zgłaszających błędy może również rozwiązać powyższe problemy.

Przedruk z:Logowanie do linku jest widoczne.




Poprzedni:.NET/C# wykorzystuje BenchmarkDotNet do testowania wydajności kodu
Następny:Wywołanie interfejsu Consul HTTP API
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com