wsdl에서 Java 웹 서비스 클라이언트를 만드는 중입니다. 필자는 Eclipses의 동적 웹 프로젝트와 새로운 웹 서비스 클라이언트를 사용하여 Apache Axis 1.4와 함께 wsdl2java로 코드를 생성했습니다. SOAP 인증을 서비스와 함께 사용하려면이 코드에 SOAP 인증을 추가해야합니다. 생성 된 코드에서 그렇게 할 수있는 위치를 찾을 수 없었습니다. 풍부한 연구 끝에이 코드를 찾았습니다. 지금까지 코드에 대한 백본으로 사용했습니다. 그 라인을 따라 또는 뭔가wsdl2java 생성 코드에 비누 헤더 인증 추가
나는 점점되기 전에Adding ws-security to wsdl2java generated classes
"메시지에 대한 보안을 처리하는 동안 오류가 발생했습니다." 지금은 "예외 : 이해하지 못했다"
을 얻고있다 ": { http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd} 보안 메시지 : 널 (null) 헤더 (들)"나는이 예외 과거 얻기 위해 많은 일을 시도했습니다 mustUnderstand에 있습니다. 이것은 내가 지금 도착한 코드입니다.
javax.xml.namespace.QName headerName = new javax.xml.namespace.QName(
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security");
org.apache.axis.message.SOAPHeaderElement header = new org.apache.axis.message.SOAPHeaderElement(headerName);
header.setActor(null);
header.setMustUnderstand(true);
// Add the UsernameToken element to the WS-Security header
javax.xml.soap.SOAPElement utElem = header.addChildElement("UsernameToken");
utElem.setAttribute("Id", "uuid-3453f017-d595-4a5b-bc16-da53e5831cd1-1");
javax.xml.soap.SOAPElement userNameElem = utElem.addChildElement("Username");
userNameElem.setValue("username");
javax.xml.soap.SOAPElement passwordElem = utElem.addChildElement("Password");
passwordElem.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
passwordElem.setValue("password");
header.setProcessed(true);
// Finally, attach the header to the binding.
setHeader(header)
이 코드는 내 Binding_ServiceStub 클래스 ('createCall 메서드)에 있습니다.
우리는이 wsdl을 사용하여 C# 및 VB에서 클라이언트를 만들었으며 생성 된 프록시 클래스의 확장 인 ClientCredentials 변수를 변경하는 것만 큼 쉽습니다. 나는 여기서 비슷한 것을 바라고 있었다.
wsdl 코드의 보안 정책은 다음과 같습니다.
<wsp:Policy><sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"><wsp:Policy><sp:WssUsernameToken10/></wsp:Policy></sp:UsernameToken></wsp:Policy>
내가 여기에서 무엇을 할 수 있는지 아는 사람이 있습니까? 이 예외가 왜 발생하고 있습니까? 나는 접두사와 setProcesses 및 setMustUnderstand 값을 모두 헛되이 (그리고이 예외에 대한 연구를 바탕으로) 다양한 조합을 시도했다.
누군가 wsdl2java 코드에 Soap 헤더 인증을 추가하는 방법을 알고 있다면 그 점도 고려할 것입니다. 이 작업이 필요하고 방금 이와 같은 것이 더 간단하거나 적어도 더 많은 예제가 있다고 생각할 것입니다.
업데이트 - SOAPUI를 사용하여 동일한 헤더를 전달하면 문제가없는 것으로 확인되었습니다. 프레임 워크가 있어야 하나? SOAP 메시지를 처리하기 위해 사용자 지정 처리기를 만들었지 만 그건 도움이되지 못했습니다. Axis 1.4와 JAX-RPC가 문제인가? (나는 구식이긴하지만 여전히 ...)