如何在Java中调用soap服务?

时间:2017-10-20 06:01:11

标签: java http soap asmx

我想调用我在Java外部实现的soap服务。

但是,将继续发生以下错误。 '服务器无法识别HTTP Header 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 ;
  }

}

1 个答案:

答案 0 :(得分:0)

没有可用的WSDL吗?这会更容易,因为您可以使用eclipse或wsimport生成客户端。