2017-03-03 64 views
0

我有以下Web服务。未调用SOAP处理程序

@WebService(targetNamespace="T24WebServicesImpl") 
 
@XmlSeeAlso({ 
 
     MYCUSTOMERType.class, 
 
\t \t Object[].class }) 
 
@HandlerChain(file = "./handler-chain.xml") \t 
 
public class T24WebServicesImpl extends TwsController { 
 

 
\t @WebMethod 
 
\t public void myCustomer(
 
\t \t ....... 
 
\t } 
 

 
} 
 

 
handler-chain.xml 
 

 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
 
<jaxrs:handler-chains xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
 
\t xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
 
\t <jaxrs:handler-chain> 
 
\t \t <jaxrs:handler> 
 
\t \t \t <jaxrs:handler-class>com.temenos.tws.Handler</jaxrs:handler-class> 
 
\t \t </jaxrs:handler> 
 
\t </jaxrs:handler-chain> 
 
</jaxrs:handler-chains>

在执行服务,将处理程序类是不是被invoked.Kindly建议,为什么?

回答

0

尝试处理器定义是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/javaee_web_services_metadata_handler_2_0.xsd"> 
    <handler-chain> 
     <handler> 
      <handler-name>Handler</handler-name> 
      <handler-class>com.temenos.tws.Handler</handler-class> 
     </handler> 
    </handler-chain> 
</handler-chains> 

您使用的是XML前缀“JAXRS”,但你绑定XML确定指标到前缀“JavaEE的”。所以要么改变你的绑定,就像xmlns:jaxrs="http://java.sun.com/xml/ns/javaee"一样,或者只是省略上面代码中显示的命名空间。

+0

谢谢你的回应,我省略了类似上面的前缀,但响应不会被再次调用哈尔德。该处理程序应该将返回的消息格式化为XML,但仍会返回以下响应。 ,ResponseCode :: ResponseCode/CustomerID :: CustomerID/ Valleyman

+0

你可以添加你的处理代码的问题? – Schlangguru

0

public class Handler implements SOAPHandler<SOAPMessageContext> { 
 

 
\t private byte[] secretBytes; 
 

 
\t /* Getter and Setter methods */ 
 
\t public Handler() { 
 
\t } 
 

 
\t @Override 
 
\t public void close(MessageContext mCtx) { 
 
\t } 
 

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

 
\t @Override 
 
\t public boolean handleFault(SOAPMessageContext mCtx) { 
 
\t \t return true; 
 
\t } 
 

 
\t @Override 
 
\t public boolean handleMessage(SOAPMessageContext mCtx) { 
 
\t \t 
 
\t \t System.out.println("Server : handleMessage()......"); 
 
\t \t Boolean isRequest = (Boolean) mCtx 
 
\t \t \t \t .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
 
\t \t // for response message only, true for outbound messages, false for 
 
\t \t // inbound 
 
\t \t if (isRequest) { 
 

 
\t \t \t try { 
 
\t \t \t \t SOAPMessage soapMsg = mCtx.getMessage(); 
 
\t \t \t \t SOAPPart sp = soapMsg.getSOAPPart(); 
 
\t \t \t \t sp.getEnvelope().removeNamespaceDeclaration("soap"); 
 
\t \t \t \t SOAPBody body = soapMsg.getSOAPBody(); 
 

 
\t \t \t \t SOAPBodyElement bodyElement = body.addBodyElement(new QName("", 
 
\t \t \t \t \t \t "javaee")); 
 
\t \t \t \t // Test adding a node, restore Arraylist code back 
 
\t \t \t \t soapMsg.writeTo(System.out); 
 
\t \t \t \t Node testNode = (Node) body.getFirstChild(); 
 
\t \t \t \t append(testNode, "CustomerName", "Jon Doe"); 
 
\t \t \t \t 
 
\t \t \t \t soapMsg.writeTo(System.out); 
 
\t \t \t \t System.out.println("Server : After append()......"); 
 
\t \t \t \t 
 
\t \t \t \t return true; 
 
\t \t \t } catch (Exception ex) { 
 

 
\t \t \t } 
 
\t \t } 
 
\t \t return true; 
 
\t } 
 

 
\t private void append(Node addNode, String string, String string2) { 
 
\t \t Element element = addNode.getOwnerDocument().createElement(string); 
 
\t \t element.setTextContent(string2); 
 
\t \t addNode.appendChild(element); 
 
\t // \t firstChild. 
 

 
\t } 
 
}