我是一个我无法控制的SOAP服务的客户端(在.NET中实现).该服务提供WSDL.我使用Apache CXF从WSDL生成java客户端(具体来说,我使用的是Maven的cxf-codegen-plugin,它使用了wsdl2java).
但是,当我实例化生成的服务类时,会记录以下警告:
Sep 04, 2014 5:18:00 PM [com.sun.xml.internal.ws.policy.EffectiveAlternativeSelector] selectAlternatives
WARNING: WSP0075: Policy assertion "{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}TransportBinding" was evaluated as "UNKNOWN".
Sep 04, 2014 5:18:00 PM [com.sun.xml.internal.ws.policy.EffectiveAlternativeSelector] selectAlternatives
WARNING: WSP0019: Suboptimal policy alternative selected on the client side with fitness "UNKNOWN".
Run Code Online (Sandbox Code Playgroud)
但是客户端工作正常 - 我使用该服务没有任何问题.但是,我对这些错误感到困惑.
错误是关于WSDL中的这个安全策略,我认为它说它无法理解:
<wsp:Policy wsu:Id="soap11_policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
</wsp:Policy>
</sp:TransportBinding>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
Run Code Online (Sandbox Code Playgroud)
但据我所知,这是一个完全普通的政策,并没有什么不寻常之处.当然应该理解?我该如何修复此警告?
为了记录,这里是如何调用wsdl2java(摘自pom.xml).
该-exsh trueARG和cxf-rt-bindings-soap …
我们正在为远程服务编写客户端,该服务公开SOAP Web服务并为这些服务发布WSDL定义.
我们在测试期间无法访问系统,因此我们想编写一个模拟服务.我们正在为客户端使用Python,所以理想情况下我们希望将Python用于模拟服务器,尽管我认为它并非绝对必要.
我们的梦想是能够从我们可以填写的WSDL文件中生成存根,然后使用Paste Deploy作为WSGI服务器提供存根,尽管它不必是Paste Deploy或WSGI,只要它可靠地工作即可.主要的是我们需要从"真正的"WSDL文件生成存根,以便我们不会意外地编写不兼容的模拟服务器.
我们在客户端库中使用suds,并查看了soaplib和ZSI.然而,soaplib中的wsgi2py内容在顶部说"不要使用",ZSI似乎要吞下很多东西.人们通常会用这种东西做什么?
马丁
我的网络上有一个摄像头,我试图用肥皂水连接,但泡沫不会发送所需的所有信息.我需要在WSDL文件中放置未定义的额外soap标头,以便摄像头可以理解该消息.所有头文件都包含在SOAP信封中,然后suds命令应该在邮件正文中.
我已经检查了suds 网站 ,它说要像这样传入标题:(这会将元素作为标题传递,但我有一个信封,所以我不知道如何输入这个)
from suds.sax.element import Element
client = client(url)
ssnns = ('ssn', 'http://namespaces/sessionid')
ssn = Element('SessionID', ns=ssnns).setText('123')
client.set_options(soapheaders=ssn)
result = client.service.addPerson(person)
Run Code Online (Sandbox Code Playgroud)
现在,我不确定如何实现这一点.比方说,我有以下标题:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP
ENC="http://www.w3.org/2003/05/soap-encoding"
<wsa:MessageID SOAP-ENV:mustUnderstand="true">urn:uuid:43268c01-f09c6</wsa:MessageID>
<SOAP-ENV:Header>
Run Code Online (Sandbox Code Playgroud)
使用这个或类似的例子有谁知道如何将有效的SOAP消息传递给目标服务?
谢谢
我的客户给了我一个.wsdl文件来访问他们的web服务.使用VS2008我可以创建一个项目,但我不知道如何在其中使用.wsdl文件.
对于那些经常使用Web服务的人来说,他们不时会得到更新,这并不奇怪.而且您始终需要跟踪这些更新的更改.
在我的特定情况下,我处理由WSDL定义的Web服务,并且我获得了基于此WSDL生成的类.
但是在从更新的WSDL重新生成类之前,我希望看到WSDL中的更改并确定更改量 - 看看我应该做些什么准备.
不幸的是,如果我只比较新旧版本的.wsdl文件,由于一个原因并不总是很好 - wsdl内容可以重新排序(内部重构).这就是找到更多语义工具的原因.
我已经尝试过Oxygen XML Diff工具,但它对我来说效果也不好.
我正在寻找一个工具,它将采用两个XML并且只带来语义差异,例如:
为了这个工作,我猜这个工具必须加载并深入分析结构,Oxygen XML Diff声称做得很好,但它只是一个改进版本的文本文件比较.
您能否为此推荐一项工作,特别是要查看基于WSDL的Web服务更新.
更新1:新想法是比较生成的源而不是WSDL.
谢谢.
我需要使用打印机的SOAP服务.有一个Windows工具来访问这个服务,我用它来生成SOAP请求和我需要的重要功能的响应.
现在我应该使用Python编写一个Linux客户端,我发现最简单的方法是使用suds带有WSDL文件的库.但我没有这个WSDL!
当我调查windows工具(查看可执行文件的hexdump)时,我得出结论可能根本没有WSDL文件.
现在我的问题是,有没有人体验过"逆向工程"SOAP服务,并且知道哪些工具可以用于为现有服务创建WSDL文件?(谷歌还没有提出任何有用的东西).
我们需要使用一个Web服务,它获得了一个使用xsd:import进行数据类型定义的WSDL.savon gem不支持,因为它使用芥末.
我们正在使用Ruby 1.9.2
你能不能给我一些宝石.
关心Surendran
我已经创建了一个WCF服务,但是服务WSDL没有显示我的类(复杂类型).
以下是服务:
[ServiceContract]
public interface IFedexService
{
[OperationContract]
ShipmentReply CreateMultiFedExShipment(RxRdShipment shipment);
[OperationContract]
ShipmentReply CreateFedExShipment(RxRdShipment shipment);
}
Run Code Online (Sandbox Code Playgroud)
我的班级定义是:
[DataContract]
public class ShipmentReply
{
[DataMember]
public string ReferenceNumber { get; set; }
[DataMember]
public string MasterTrackingNumber { get; set; }
[DataMember]
public List<ReplyPackage> Packages { get; set; }
[DataMember]
public bool Response { get; set; }
[DataMember]
public RxNotification Notification { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我没有找到这ShipmentReply门课WSDL.我的问题是什么?
谢谢你,Arefin
从Elixir,我试图使用detergentex调用SOAP Web服务,这是一个围绕Erlang库清洁剂的包装器.
我可以在洗涤剂主页上的示例中调用SOAP Web服务,没有任何问题:http://www.webservicex.net/convertVolume.asmx? WSDL
参数:
wsdl_url = "http://www.webservicex.net/convertVolume.asmx?WSDL"
action = "ChangeVolumeUnit"
parameters = ["100","dry","centiliter"]
Run Code Online (Sandbox Code Playgroud)
但是,当尝试调用Axis2 Java SOAP Web服务时,我遇到了一些问题.示例:http://www.thomas-bayer.com/axis2/services/BLZService?wsdl
以下列方式调用"getBank"时
wsdl_url = "http://www.thomas-bayer.com/axis2/services/BLZService?wsdl"
action = "getBank"
parameters = ["abc"]
wsdl = Detergentex.init_model(wsdl_url)
res = Detergentex.call(wsdl, action, parameters)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
{:error, 'Struct doesn\'t match model: recordtype not expected: p:getBank'}
Run Code Online (Sandbox Code Playgroud)
使用以下堆栈跟踪
src/erlsom_write.erl:357: :erlsom_write.findAlternative/4
src/erlsom_write.erl:258: :erlsom_write.processSubType/5
src/erlsom_write.erl:241: :erlsom_write.processElementValues/7
src/erlsom_write.erl:132: :erlsom_write.struct2xml/6
src/erlsom_write.erl:323: :erlsom_write.processAlternativeValue/8
src/erlsom_write.erl:241: :erlsom_write.processElementValues/7
src/erlsom_write.erl:116: :erlsom_write.struct2xml/6
src/erlsom_write.erl:323: :erlsom_write.processAlternativeValue/8
src/erlsom_write.erl:241: :erlsom_write.processElementValues/7
src/erlsom_write.erl:45: :erlsom_write.write/2
src/detergent.erl:211: :detergent.call_attach/8 …Run Code Online (Sandbox Code Playgroud) 我正在使用他们提供的wsdl向Canada Post发送一个电话,其中包含以下部分:
<!-- group-id and transmit-shipment are mutually exclusive -->
<xsd:element name="groupIdOrTransmitShipment" abstract="true" />
<xsd:element name="group-id" type="tns:GroupIDType" substitutionGroup="tns:groupIdOrTransmitShipment"/>
<xsd:element name="transmit-shipment" type="xsd:boolean" fixed="true" substitutionGroup="tns:groupIdOrTransmitShipment"/>
<xsd:complexType name="ShipmentType">
<xsd:all>
<xsd:element ref="tns:groupIdOrTransmitShipment" />
<xsd:element name="quickship-label-requested" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="cpc-pickup-indicator" type="xsd:boolean" fixed="true" minOccurs="0"/>
<xsd:element name="requested-shipping-point" type="tns:PostalCodeType" minOccurs="0"/>
<xsd:element name="shipping-point-id" type="tns:OutletIDType" minOccurs="0" />
<xsd:element name="expected-mailing-date" type="xsd:date" minOccurs="0"/>
<xsd:element name="delivery-spec" type="tns:DeliverySpecType"/>
<xsd:element name="return-spec" type="tns:ReturnSpecType" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
在他们的代码示例中,他们扩展了Soap类并覆盖了__doRequest()Soap方法,如下所示:
/*
Need to override SoapClient because the abstract element 'groupIdOrTransmitShipment' is expected to be in the request …Run Code Online (Sandbox Code Playgroud)