왜 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개의 생성자를 제거하면 위 문제들도 해결할 수 있습니다.
다음에서 재게재:하이퍼링크 로그인이 보입니다.
|