2017-03-03 56 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 } 
 
}