jaxws를 사용하여 웹 서비스 클라이언트를 구축하고 soap 메시지를 실현하는handler 검증 예시
4428 단어 javajaxwswebservice클라이언트soap
wsimport -keep -extension -s ./src -p com.jaxws.test http://192.168.1.1:8080/service?wsdl
com에 있습니다.jaxws.테스트 패키지 아래에서 자동으로 생성된 각종 클라이언트 관련 보조 클래스를 찾을 수 있습니다.이런 종류를 어떻게 쓰는지 자세히 말하지 마라, 인터넷에는 많은 자료가 있다.그 다음은 호출 클래스를 직접 작성하는 것입니다. (저는 단지 하나의 방법일 뿐입니다. 호출되면 됩니다.)
public String jaxws(Object[] opArgs)
{
ServicesService service=new ServicesService();
// SOAP
service.setHandlerResolver(new HandlerResolver(){
public List<Handler> getHandlerChain(PortInfo portInfo) {
List<Handler> handlerList = new ArrayList<Handler>();
//
handlerList.add(new ClientHandler());
return handlerList;
}
});
String result =service.getServicesPort().getResults(opArgs.toString());
//
System.out.println(result);
return result;
}
여기의 [//인증 정보 추가handlerList.add(new ClientHandler();]를 참고하십시오.그래서 우리는 인증 메시지를 조립하기 위해 클라이언트 Handler 클래스를 새로 만들어야 한다. 다음과 같다.
package com.jaxws.test;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.*;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
public class ClientHandler implements SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext ctx) {
// , ,
Boolean request_p=(Boolean)ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(request_p){
try {
SOAPMessage msg=ctx.getMessage();
SOAPEnvelope env=msg.getSOAPPart().getEnvelope();
SOAPHeader hdr=env.getHeader();
if(hdr==null) hdr=env.addHeader();
//
//QName(String namespaceURI, String localPart, String prefix)
//QName(String namespaceURI, String localPart)
//QName(String localPart)
//@param namespaceURI:QName
//@param localPart:QName
//@param prefix:QName
QName name=new QName("http://csdc.info/", "Authentication", "wsse");
SOAPHeaderElement header = hdr.addHeaderElement(name);
//addChildElement(String localName, String prefix,String uri)
//addChildElement(String localName, String prefix)
//addChildElement(String localName)
//@param uri: URI
//@param localName:
//@param prefix:
// JDK 1.6 API
SOAPElement userElement = header.addChildElement("Username", "wsse");
userElement.addTextNode("admin");
SOAPElement passElement = header.addChildElement("Password", "wsse");
passElement.addTextNode("admin");
msg.saveChanges();
// SOAP System.out,
msg.writeTo(System.out);
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
// TODO Auto-generated method stub
return false;
}
@Override
public void close(MessageContext context) {
// TODO Auto-generated method stub
}
@Override
public Set<QName> getHeaders() {
// TODO Auto-generated method stub
return null;
}
}
이 종류는 모든 soap 메시지를 하나의 헤더 메시지로 추가했습니다. 여기 있는 헤더 메시지는 다음과 같습니다
<wsse:Authentication xmlns:wsse="http://csdc.info/">
<wsse:Username>admin</wsse:Username>
<wsse:Password>admin</wsse:Password>
</wsse:Authentication>
이렇게 하면 soap 헤드 인증을 가진 jaxws 기반의 웹 서비스 클라이언트를 실현할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.