이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 26959|회답: 0

[출처] C# 웹서비스 서버에 대한 Java 호출은 HTTP 헤더 SOAPAction의 값을 인식하지 못합니다

[링크 복사]
2021-3-4 13:19:39에 게시됨 | | | |
왜 C#을 호출하는 웹 서비스 보고 서버는 HTTP 헤더 SOAPAction의 값을 인식하지 못하고 C#이 변경하도록 허용하는데, C#은 태그만 추가하면 된다고 해서 JAVA는 행동 요청을 지정할 수 없는 걸까요?



웹서비스를 게시하고 호출하는 것은 매우 간단하지만, 여전히 다음과 같이 요약된 사소한 문제들이 있습니다:

Java는 .net의 webService를 호출하여 "Server failed failed to recognition 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";
  서비스 콜 생성     
  서비스 서비스 = 새로운 서비스();
  서비스를 통한 호출 객체 생성
  콜 = (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);
  자바가 .net의 webService를 호출할 때 "서버가 HTTP 헤더 SOAPAction의 값을 인식하지 못했습니다"라는 오류가 발생하지 않도록 하세요.
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); 반환된 매개변수 유형
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); 또한 호출할 메서드를 반드시 추가해야 하며, 그렇지 않으면 오류가 보고됩니다
  객체 배열은 매개변수를 캡슐화합니다     
  String ret = (String) call.invoke(new Object[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

댓글란을 주목하세요.

하이퍼링크 로그인이 보입니다.? WSDL은 공용 웹 서비스(Public Web Service)의 약자입니다

다음 예외는 CXF를 사용하는 wsdl2java.bat가 wsdl 파일을 기반으로 .net 웹서비스를 게시하는 클라이언트를 생성할 때 발생합니다


( 정의되지 않은 요소 선언 's:schema')

용액:

wsdl.xml 열고 사용해


<s:any minOccurs="2" maxOccurs="2"/>대체 <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"/> 두 개의 <:any />

그냥 한 문장으로 적혀 있었다.

참조하이퍼링크 로그인이 보입니다.

CXF의 wsdl2java.bat을 사용하면 wsdl 파일을 기반으로 클라이언트 컴파일 슈퍼 오류가 발생합니다

용액:

jax-ws2.2 사양이 java6와 충돌하기 때문에 제대로 컴파일되지 않습니다.

하지만 프로그램은 java5에서만 컴파일할 수 없으므로 jax-ws 사양 버전을 낮춰야 하며, 이는 다음과 같이 처리할 수 있습니다: 명령어 실행

WSDL2Java -frontend jaxws21 -client *.xml

이렇게 하여 jax-ws2.1로 생성된 코드를 java6에서 컴파일하고 실행할 수 있습니다.

도구에서 생성된 클라이언트 코드와 텍스트 비교를 비교해보니, 텍스트가 3개의 클라이언트 코드를 더 생성했으니, 오류를 보고한 3개의 생성자를 제거하면 위 문제들도 해결할 수 있습니다.

다음에서 재게재:하이퍼링크 로그인이 보입니다.




이전의:.NET/C#은 BenchmarkDotNet을 사용하여 코드 성능을 테스트합니다
다음:Consul HTTP API 인터페이스 호출
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com