2017-10-20 142 views
1

我想调用我在外部使用Java实现的soap服务。如何在Java中调用soap服务?

但是,下面的错误将继续发生。 '服务器无法识别HTTP标头SOAPAction的值'

请查看我的代码出了什么问题。

测试网址为 'http://example.com/test.asmx?op=tt'

**是什么SOAPAction的?????

import javax.xml.soap.*; 

public class SOAPClientSAAJ { 

    // SAAJ - SOAP Client Testing 
    public static void main (String args[]) { 

    String soapEndpointUrl = "http://example.com/test.asmx" ; 
    String soapAction = "http://example.com/tt" ; 

    callSoapWebService (soapEndpointUrl , soapAction) ; 
    } 

private static void createSoapEnvelope (SOAPMessage soapMessage) throws SOAPException { 
    SOAPPart soapPart = soapMessage .getSOAPPart() ; 

    // SOAP Body 
    SOAPBody soapBody = envelope .getBody() ; 
    SOAPElement soapBodyElem1 = soapBody .addChildElement ("element1") ; 
    soapBodyElem11 .addTextNode ("test") ; 
    SOAPElement soapBodyElem2 = soapBody .addChildElement ("element2") ; 
    soapBodyElem12 .addTextNode ("test") ; 

} 

private static void callSoapWebService (String soapEndpointUrl, String soapAction) { 
    try { 
     // Create SOAP Connection 
     SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory . newInstance() ; 
     SOAPConnection soapConnection = soapConnectionFactory .createConnection() ; 

     // Send SOAP Message to SOAP Server 
     SOAPMessage soapResponse = soapConnection .call (createSOAPRequest(soapAction), soapEndpointUrl) ; 

     // Print the SOAP Response 
     System .out . println("Response SOAP Message:"); 
     soapResponse .writeTo (System. out); 
     System .out . println() ; 

     soapConnection .close() ; 
    } catch (Exception e) { 
     System .err . println("\nError occurred while sending SOAP Request to Server!\nMake sure you have the correct endpoint URL and SOAPAction!\n") ; 
     e .printStackTrace() ; 
    } 
} 

    private static SOAPMessage createSOAPRequest (String soapAction) throws Exception { 
    MessageFactory messageFactory = MessageFactory .newInstance() ; 
    SOAPMessage soapMessage = messageFactory .createMessage() ; 

    createSoapEnvelope (soapMessage) ; 

    MimeHeaders headers = soapMessage .getMimeHeaders() ; 
    headers .addHeader ("SOAPAction", soapAction) ; 

    soapMessage .saveChanges() ; 

    /* Print the request message, just for debugging purposes */ 
    System .out . println("Request SOAP Message:"); 
    soapMessage .writeTo (System. out); 
    System .out . println("\n"); 

    return soapMessage ; 
    } 

} 

回答

0

是否没有WSDL可用?这会容易得多,因为您可以使用eclipse或wsimport生成客户端。