当前位置: 首页 > 知识库问答 >
问题:

使用带有Java问题的SOAP WebService

柯英奕
2023-03-14

我读了很多关于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");

    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与它通信,没有问题。

共有1个答案

汝承载
2023-03-14

在您引用的答案中,returncodesSOAPActionhttp://ws.cdyne.com/returncodes,它由行headers.addHeader(“SOAPAction”,serverURI+“returncodes”)构造;

但是,在WSDL中,由于您使用的不是URL,而是URN,所以GetBoardStatusSOAPActionURN:server#GetBoardStatus。如果您使用相同的级联方案,您将缺少#,您将使用urn:boardsoap而不是urn:server

尝试使用`headers.header(“SOAPAction”,“urn:server#GetBoardStatus”)。

 类似资料:
  • Microsoft Windows[版本10.0.18362.1016](c)2019 Microsoft Corporation。保留所有权利。

  • 总的来说,我的问题是我试图用WinnAppDriver自动化Windows 10应用程序,并用Python编写我的自动化程序。似乎很少有关于如何做到这一点的信息,因为大多数WinAppDriver示例都是用Java编写的(可以理解...).但是我对Python基本一无所知,对Java更是一无所知。因此...我错过了什么书或视频吗?具体来说,我安装了所有的东西(通过VS代码安装Python ),并实

  • 问题内容: 我正在尝试从以下网页解析标题:http : //kid37.blogger.de/stories/1670573/ 当我在title元素上使用apache.commons.lang StringEscapeUtils.escapeHTML方法时,我得到以下信息 但是,当我在我的网页中以utf-8编码显示它时,它只会显示一个问号。 使用以下代码: 如果我通过以下网站运行标题:http :

  • 问题内容: 我正在使用以下SQL命令来重命名列。 但这会导致错误: 消息15248,级别11,状态1,过程sp_rename,第238 行参数@objname含糊或声明的@objtype(COLUMN)错误。 请建议如何使用来重命名列。 [我正在使用的此命令可以在Microsoft Technet上找到] 问题答案: 试试这个: sp_rename(Transact-SQL)(msdn): [@o

  • 问题内容: 显然,以下代码不会按预期方式打印出任何内容。.我确信这与我尝试将项目列表放入中的事实有关。显然,这不仅仅是文本替换。 我怎么解决这个问题?谢谢 问题答案: 不幸的是,SQL参数不能以这种方式 解析 ,换句话说,后端不只是构建一个安全字符串来替换每个参数的值。相反,您必须动态构建参数列表: 然后添加每个参数: 如果在运行时之前还不知道这些参数,那么您当然可以在循环中添加这些参数: 如果您

  • 我努力解决问题,我真的很接近,但我很困惑为什么我的程序似乎跳过,没有读取输入学生姓名部分我的输入。当学生数为1时,似乎也有这个问题。任何帮助都将不胜感激!:]