java - 使用 SOAP WebService 与 Java 问题

标签 java web-services soap wsdl

我在 stackoverflow 上阅读了大量教程和类似问题,但在连接到 SOAP 服务时仍然遇到问题。

我正在尝试使用 Java 调用 SOAP Web 服务。我在这里找到了一个很好的答案:https://stackoverflow.com/a/15942217/2145530

该示例按原样完美工作,但是当我将其更改为另一个 wsdl 文件时,它不再工作:

public static void main(String args[]) throws Exception {
    // Create SOAP Connection
    SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
    SOAPConnection soapConnection = soapConnectionFactory.createConnection();

    // Send SOAP Message to SOAP Server
    String url = "http://192.168.200.165/soap/server.php";
    SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);

    // print SOAP Response
    System.out.print("Response SOAP Message:");
    soapResponse.writeTo(System.out);

    soapConnection.close();
}

private static SOAPMessage createSOAPRequest() throws Exception {
    MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage soapMessage = messageFactory.createMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();

    String serverURI = "urn:BoardSOAP";

    // SOAP Envelope
    SOAPEnvelope envelope = soapPart.getEnvelope();
    envelope.addNamespaceDeclaration("soap", serverURI);

    System.out.println(envelope.getNamespaceURI());

    MimeHeaders headers = soapMessage.getMimeHeaders();
    headers.addHeader("SOAPAction", serverURI  + "getBoardStatus");

    soapMessage.saveChanges();

    /* Print the request message */
    System.out.print("Request SOAP Message:");
    soapMessage.writeTo(System.out);
    System.out.println();

    return soapMessage;
}

如你所见,我更改了这些行:

String url = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx";
String serverURI = "http://ws.cdyne.com/";
headers.addHeader("SOAPAction", serverURI  + "ReturnCodes");

String url = "http://192.168.200.165/soap/server.php";
String serverURI = "urn:BoardSOAP";
headers.addHeader("SOAPAction", serverURI  + "getBoardStatus");

这是我的 wsdl 文件:wsdl

完整输出:

    http://schemas.xmlsoap.org/soap/envelope/
Request SOAP Message:<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="urn:BoardSOAP"><SOAP-ENV:Header/><SOAP-ENV:Body/></SOAP-ENV:Envelope>
Response SOAP Message:<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body><SOAP-ENV:Fault><faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode><faultactor xsi:type="xsd:string"></faultactor><faultstring xsi:type="xsd:string">Operation &apos;&apos; is not defined in the WSDL for this service</faultstring><detail xsi:type="xsd:string"></detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>

WSDL 文件没有损坏,我可以通过 SoupUI 与它通信,没有任何问题。

最佳答案

在您引用的答案中,soapAction对于 ReturnCodeshttp://ws.cdyne.com/ReturnCodes ,由 headers.addHeader("SOAPAction", serverURI + "ReturnCodes"); 行构造

但是,在您的 WSDL 中,由于您使用的不是 URL,而是 URN 作为 namespace 标识符,因此 soapAction对于 getBoardStatusurn:server#getBoardStatus 。如果您使用相同的串联方案,您将丢失 # 并且您将使用urn:BoardSoap而不是urn:server .

尝试使用 `headers.Header("SOAPAction", "urn:server#getBoardStatus")。

关于java - 使用 SOAP WebService 与 Java 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33389886/

相关文章:

iphone - 如何处理以下 Web 服务响应?

Java:将作业发送到服务器执行

java - 递归图遍历

java - WebService 客户端失败 : Tomcat, CXF

从 AXIS 迁移到 CXF 后,javax.xml.ws.soap.SOAPFaultException : Unmarshalling Error: unexpected element (uri :"", 本地 :"fault")

php - 如何在 PHP 中发送带有 SSL 证书的 SOAP 请求?

java - 正则表达式很慢,如何快速检查一个字符串是否只有单词字符?

java - 如何开始创建基于/使用 JGR 的 R 应用程序?

java - 在服务器上运行 java webservice

java - 从 WSDL 生成的自顶向下 Java 服务中的 CXF 3.0.3 部署错误