标签: webservice-client

Web服务客户端给出了WSDL

我正在尝试用Java创建一个Web服务客户端.我不知道该怎么做.这是WSDL的URL:https://testservices.gatewayedi.com/PayerList/payerlist.asmx?wsdl

这是WSDL:

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="https://ws.gatewayedi.com/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="https://ws.gatewayedi.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="https://ws.gatewayedi.com/">
      <s:element name="Ping">
        <s:complexType />
      </s:element>
      <s:element name="PingResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="PingResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="AuthSOAPHeader" type="tns:AuthSOAPHeader" />
      <s:complexType name="AuthSOAPHeader">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="User" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string" />
        </s:sequence>
        <s:anyAttribute />
      </s:complexType>
      <s:element name="GetXMLPayerList">
        <s:complexType />
      </s:element>
      <s:element name="GetXMLPayerListResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="GetXMLPayerListResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element …
Run Code Online (Sandbox Code Playgroud)

java wsdl web-services webservice-client

26
推荐指数
2
解决办法
8万
查看次数

发布数据并使用PHP Curl检索响应?

我很擅长使用Web服务,所以我发现这很令人困惑.

如果我有一个URL我试图发布一些JSON数据,我理解如何使用CURL PHP方法做到这一点.

我想知道的是,如果我这样做,并且URL有某种服务器响应..如何在我的php中获得该响应并使用它在PHP中采取不同的操作?

谢谢!

-Elliot

php post curl webservice-client

26
推荐指数
3
解决办法
9万
查看次数

使用Apache CXF以XML格式记录请求/响应

是否可以使用CXF将请求/响应记录为XML,理想情况下是单独的文件,以便我可以监视应用程序正在做什么?

xml cxf webservice-client

25
推荐指数
4
解决办法
6万
查看次数

如何从不同的服务中合并WSDL和XSD的公共部分?

我必须与一组Web服务进行交互,每个Web服务都有自己的WSDL和XSD.XSD有时合并在一个文件中,有时会分布在多个文件中(20-30).但是,根据经验,我知道大多数消息结构和数据共享一个大的公共子集,在不同的事务中可能只有20%不同.

不幸的是,我无法控制服务器部件或服务声明,所以让他们修复它是不可能的.客户端的第一个版本单独生成每个服务,然后将它们用作单独的外观,以形成连贯的更高级别服务,作为另一个系统的适配器.

我使用CXF和默认的JAXB绑定,并为每个服务强加了不同的生成包.我这样做是因为一些大多数服务都使用通用数据模型,但并非所有服务都使用相同的版本或定制,所以我有冲突,因此选择了暴力,所以我可以完成系统.

但是,这会导致适配器的内存要求在每个服务加载其上下文时通过屋顶.现在,即使在我开始发送请求和处理响应之前,我还有500M的内存仅用于容纳服务客户端的适配器.虽然我可以使用当前情况毫无问题地运行系统,但这会产生危害解决方案部署的约束; 我的客户希望大幅减少这种情况(60%或更多),以便该系统可以与其他系统一起安装而无需硬件升级.

问题如下: 是否有工具或技术允许我将每个交易的公共部分放在一起,以便它们可以生成一次并在需要时引用?

除了将系统重新分解为不同的框架或数据绑定所需的时间之外,我不受CXF或JAXB的约束.

预先感谢您的帮助.

---编辑---

谢谢Blaise.这指向JAXB的一个有用的功能:剧集.不幸的是,我仍然需要提取不同服务的公共基础部分.所以现在我需要的是一种通过结构差异提取这个公共部分的方法,这是一个diff工具,可以了解XSD描述的结构和类型层次结构,以便使用适当的引用来连接公共部分.专业部分.

java cxf jaxb out-of-memory webservice-client

22
推荐指数
1
解决办法
2606
查看次数

为什么必须通过HTTP发送SOAP消息?

下面是一个演示SOAP请求消息:

HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

    <SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   <SOAP-ENV:Header>
       <t:SessionOrder
         xmlns:t="http://example.com"
         xsi:type="xsd:int" mustUnderstand="1">
           5
       </t:SessionOrder>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
       <GetStockQuote
         xmlns="http://someexample.com">
           <Price>MSFT</Price>
       </GetStockQuote>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

我们可以看到,这个SOAP消息被编码为好像它是一个网页.为什么我们必须使用HTTP协议?SOAP消息只是一些XML,为什么我们不只是使用XML作为信息交换协议并摆脱HTTP头(因此只留下HTTP).

非常感谢.

更新 - 1

HTTP不是传输级协议.它只是一个应用程序级协议.它与运输无关.实际上,我的问题是将HTTP内容添加到SOAP消息的动机是什么?

xml soap network-programming protocols webservice-client

20
推荐指数
3
解决办法
4万
查看次数

使用纯JAX-WS添加SOAP头对象

我正在尝试使用JAX WSPayPal Express Checkout API实现简单的Web服务客户端.PayPal Express Checkout API提供了WSDL文件,我可以使用CXF的wsdl2java实用程序从中生成Java类.

出于身份验证原因,它需要为每个请求添加SOAP Header.这个标题非常简单,应该如下所示:https: //cms.paypal.com/us/cgi-bin/?cmd = __render-content&content_ID = developer/e_howto_api_ECSOAPAPasics #id09C3I0CF0O6

WSDL类生成的包括ebay.apis.eblbasecomponents.CustomSecurityHeaderType类,它表示我需要添加到每个请求的标头.

所以问题是:如何考虑以下条件,将手动创建的CustomSecurityHeaderType类实例添加到SOAP请求的标题中:

  1. 我不是非常渴望使用com.sun.*包中的类,如答案中所述:JAX-WS - 添加SOAP标头(主要是因为不同JDK之间可能的可移植性问题)
  2. 我不想手动将该对象编组到嵌套的 javax.xml.soap.SOAPElement实例中,如下面的答案所述: 如何使用Java JAX-WS添加SOAP Header

soap web-services paypal jax-ws webservice-client

19
推荐指数
3
解决办法
7万
查看次数

如何向SOAP请求添加标头?

我尝试通过java代码调用HTTPS SOAP Web服务:

    URL url = new URL("https://somehost:8181/services/"SomeService?wsdl");
    QName qname = new QName("http://services.somehost.com/", "SomeService");
    Service service = Service.create(url, qname);
    SomeService port = service.getPort(SomeService .class);
    port.doSomething();
Run Code Online (Sandbox Code Playgroud)

但得到例外:

threw an unexpected exception: javax.xml.ws.soap.SOAPFaultException: Security Requirements not met - No Security header in message
Run Code Online (Sandbox Code Playgroud)

当我分析正确的请求样本时,我确定它必须包含标题:

 <S:Header>
  <To xmlns="http://www.w3.org/2005/08/addressing">http://somehost:8181/services/SomeService</To>
  <Action xmlns="http://www.w3.org/2005/08/addressing">https://somehost:8181/services/"SomeService/doSomethingRequest</Action>
  <ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
     <Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
  </ReplyTo>
  <MessageID xmlns="http://www.w3.org/2005/08/addressing">uuid:3428539e-d645-72ae-adc0-5423c1e68942</MessageID>
  <wsse:Security S:mustUnderstand="true">
     <wsu:Timestamp wsu:Id="_1" xmlns:ns14="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns13="http://schemas.xmlsoap.org/soap/envelope/">
        <wsu:Created>2013-01-15T16:36:30Z</wsu:Created>
        <wsu:Expires>2014-01-15T14:06:30Z</wsu:Expires>
     </wsu:Timestamp>
  </wsse:Security>
Run Code Online (Sandbox Code Playgroud)

那么如何将此标头添加到我的SOAP请求中?

java web-services jax-ws webservice-client

19
推荐指数
3
解决办法
7万
查看次数

NAMESPACE_ERR:尝试以对名称空间不正确的方式创建或更改对象

尝试从SOAP响应中检索SOAP正文,但是收到此错误:

NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.

Document doc = soapResMsg.getSOAPBody().extractContentAsDocument(); -- Exception is thrown here
org.dom4j.io.DOMReader d4Reader = new org.dom4j.io.DOMReader();
org.dom4j.Document d4doc = d4Reader.read(doc);
Run Code Online (Sandbox Code Playgroud)

使用Saaj1.4

对此有什么解决方法?

java xml webservice-client xalan saaj

18
推荐指数
5
解决办法
4万
查看次数

SOAPFaultException"MustUnderstand标头(oasis-200401-wss-wssecurity-secext-1.0.xsd)未被理解"

我尝试从使用PasswordText WSS类型的Web服务获取信息.首先,我使用soapUI测试它并成功获取数据.然后我在Java上实现了身份验证,编写了SecurityHandler:

public final class SecurityHandler implements SOAPHandler<SOAPMessageContext> {

...

@Override
public boolean handleMessage(SOAPMessageContext messageContext) {
    boolean outInd = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    if (outInd) {
        try {
            WSSecUsernameToken builder = new WSSecUsernameToken();
            builder.setPasswordType(WSConstants.PASSWORD_TEXT);
            builder.setUserInfo(_username, _password);
            builder.addNonce();
            builder.addCreated();

            Document doc = messageContext.getMessage().getSOAPPart().getEnvelope().getOwnerDocument();
            WSSecHeader secHeader = new WSSecHeader();
            secHeader.insertSecurityHeader(doc);
            builder.build(doc, secHeader);
        } catch (Exception e) {
            LOGGER.error("Unable to handle SOAP message", e);
            return false;
        }
    }
    return true;
}

...
}
Run Code Online (Sandbox Code Playgroud)

我查看了doc对象,XMLUtils.PrettyDocumentToString(doc)看到它看起来像是由soupUI发送的XML - 所有认证信息(登录,密码,现时和创建时间)都已到位,标签的mustUnderstand属性Security为true.

然后我遇到了错误:

javax.xml.ws.soap.SOAPFaultException:MustUnderstand标题:[{ http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd …

java webservice-client wss4j

18
推荐指数
2
解决办法
6万
查看次数

使用RestSharp将GET参数添加到POST请求

我想对这样的URL发出POST请求:

http://localhost/resource?auth_token=1234
Run Code Online (Sandbox Code Playgroud)

我想在体内发送JSON.我的代码看起来像这样:

var client = new RestClient("http://localhost");
var request = new RestRequest("resource", Method.POST);
request.AddParameter("auth_token", "1234");    
request.AddBody(json);
var response = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)

如何将auth_token参数设置为GET参数并将请求设置为POST?

.net c# web-services webservice-client restsharp

17
推荐指数
2
解决办法
3万
查看次数