0

SOAPHandler를 사용하여 SOAP 헤더를 처리하려고합니다. 즉, SOAPHandler를 만들었지 만 지정된 서비스에 연결하는 방법은 무엇입니까? 즉,이 처리기가이 서비스에 대한 메시지를 처리해야한다고 말할 수 있습니다. 아마도 일부 주석 또는 XML 구성을 사용해야 할 것입니다 ...?SOAPHandler (JAX-WS)를 연결하는 방법은 무엇입니까?

+0

해결책을 찾았습니다. 클라이언트 측에서는 BinderProvider를 사용하여 추가함으로써 프로그래밍 방식으로 추가 할 수 있습니다. 서비스의 경우 @HandlerChain 주석 및 handlers.xml 구성을 사용해야합니다. – BlackBerry

+0

또한 여기에서 답변을 시도해보십시오 : http://stackoverflow.com/questions/10654608/add-soap-header-object-using-pure -jax-ws/10674705 – Yura

답변

0

다음 단계를 수행 할 수 있습니다. 핸들러

public class CalculatorSOAPHandlerOne implements SOAPHandler<SOAPMessageContext> { 

    private static final Logger logger = LoggerFactory.getLogger(CalculatorSOAPHandlerOne.class); 

    @Override 
    public Set<QName> getHeaders() { 
     return null; 
    } 

    @Override 
    public boolean handleMessage(SOAPMessageContext context) { 
     if(!(Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)){ 
      logger.info(" soap message passed through CalculatorSOAPHandlerOne (only for request)"); 
     } 
     return true; 
    } 

    @Override 
    public boolean handleFault(SOAPMessageContext context) { 
     return true; 
    } 

    @Override 
    public void close(MessageContext context) { 

    } 
} 

2. 핸들러를 추가 (핸들러-chain.xml)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<javaee:handler-chains 
     xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <javaee:handler-chain> 
     <javaee:handler> 
      <javaee:handler-class>com.chathurangaonline.jaxws.samples.handler.CalculatorSOAPHandlerOne</javaee:handler-class> 
     </javaee:handler> 

     <javaee:handler> 
    </javaee:handler-chain> 
</javaee:handler-chains> 

3. XML 에서 핸들러 체인 선언을 선언 정의

1 JAX-WS 서비스 구현을위한 체인

@WebService 
@HandlerChain(file = "handler-chain.xml") 
public class CalculatorService{ 

    private static final Logger logger = LoggerFactory.getLogger(CalculatorServiceImpl.class); 

    @Override 
    public double add(double num1, double num2) { 
     logger.info("== calling add method =="); 
     return num1 + num2; 
    } 

    @Override 
    public double multiply(double num1, double num2) { 
     return num1 * num2; 
    } 
} 
관련 문제