如何在Java中调用soap服务?
问题描述:
我想调用我在外部使用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 ;
}
}
答
是否没有WSDL可用?这会容易得多,因为您可以使用eclipse或wsimport生成客户端。