Web服务描述语言(WSDL)是一种基于XML的人类和机器可读语言,用于描述Web服务。它描述了可用的Web服务方法,消息请求和响应结构,可能的故障以及通信和安全要求。此标记不引用任何名为“wsdl”的工具,例如Microsoft的WSDL.EXE。
将带有 XSD 的 WSDL 读取到 org.dom4j.io.SAXReader 中的正确方法是什么?有没有办法使用 ZipInputStream 来做到这一点,这样我就不必将其保存到磁盘?
对我的术语表示歉意,我希望我在这里提供足够的信息。我正在 VB.net 中工作,并加载了一个连接的服务 URL,该 URL 拉入了一个 wsdl 文件。复杂类型对象之一...
如何在一个 WSDL 中创建多个方法并在每个方法中创建唯一的属性?
我不知道如何编写WSDL规范。 我尝试在 Soap UI 中执行此操作。 我不知道如何编写 WSDL 规范。 我尝试在 Soap UI 中执行此操作。 我不知道如何编写 WSDL 规范...
如何在Python中使用zeep在SOAP请求中传递“Any”类型参数
我有一个 WSDL,它在所有 SOAP 操作中使用“any”类型作为核心元素 (Element)。请注意,我已将其缩小,因为它相当大: 我有一个 WSDL,它在所有 SOAP 操作中使用“any”类型作为核心元素 (Element)。请注意,我已将其修剪掉,因为它很大: <?xml version="1.0" encoding="utf-8"?> <definitions targetNamespace="urn:xtk:queryDef" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="urn:xtk:queryDef" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <types> <s:schema elementFormDefault="qualified" targetNamespace="urn:xtk:queryDef"> <s:complexType name="Element"> <s:sequence> <s:any processContents="lax"/> </s:sequence> </s:complexType> <s:element name="ExecuteQuery"> <s:complexType> <s:sequence> <s:element maxOccurs="1" minOccurs="1" name="sessiontoken" type="s:string" /> <s:element maxOccurs="1" minOccurs="1" name="entity" type="tns:Element" /> </s:sequence> </s:complexType> </s:element> <s:element name="ExecuteQueryResponse"> <s:complexType> <s:sequence> <s:element maxOccurs="1" minOccurs="1" name="pdomOutput" type="tns:Element" /> </s:sequence> </s:complexType> </s:element> </s:schema> </types> <message name="ExecuteQueryIn"> <part element="tns:ExecuteQuery" name="parameters" /> </message> <message name="ExecuteQueryOut"> <part element="tns:ExecuteQueryResponse" name="parameters" /> </message> <portType name="queryDefMethodsSoap"> <operation name="ExecuteQuery"> <input message="tns:ExecuteQueryIn" /> <output message="tns:ExecuteQueryOut" /> </operation> </portType> <binding name="queryDefMethodsSoap" type="tns:queryDefMethodsSoap"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <operation name="ExecuteQuery"> <soap:operation soapAction="xtk:queryDef#ExecuteQuery" style="document" /> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="literal" /> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="literal" /> </output> </operation> </binding> <service name="XtkQueryDef"> <port binding="tns:queryDefMethodsSoap" name="queryDefMethodsSoap"> <soap:address location="https://xxxxxxxxxxxxxx/nl/jsp/soaprouter.jsp" /> </port> </service> </definitions> 我想在 Python 3 中使用 zeep 生成此有效负载: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xtk:queryDef"> <soapenv:Header/> <soapenv:Body> <urn:ExecuteQuery> <urn:sessiontoken>xxxxxxx</urn:sessiontoken> <urn:entity> <queryDef schema="nms:recipient" operation="select"> <select> <node expr="@email"/> <node expr="@lastName+'-'+@firstName"/> <node expr="Year(@birthDate)"/> </select> <orderBy> <node expr="@birthDate" sortDesc="true"/> </orderBy> </queryDef> </urn:entity> </urn:ExecuteQuery> </soapenv:Body> </soapenv:Envelope> 但是我一生都无法弄清楚如何管理 WSDL 中的“Any”类型: <s:complexType name="Element"> <s:sequence> <s:any processContents="lax"/> </s:sequence> </s:complexType> 这就是 XML 中“实体”节点所需的类型。我尝试过的所有操作都会导致 zeep 出现异常。 这是我到目前为止所拥有的: # Executes a query and returns the result set def execute_query(session_token): # Load the WSDL locally - not authorised to get from server wsdl_url = os.path.abspath("querydef_dev.wsdl") history = HistoryPlugin() client = Client(wsdl_url, plugins=[history]) execute_query_type = client.get_element("ns0:ExecuteQuery") entity_type = client.get_type("ns0:Element") any_entity = xsd.AnyObject(entity_type, entity_type(_value_1={'queryDef': [{'schema': 'recipients'}]})) params = execute_query_type(entity=any_entity, sessiontoken=session_token) response = client.service.ExecuteQuery(params) if __name__ == '__main__': execute_query('xxxxxxx') 该代码特别给出了此错误: AttributeError: 'dict' object has no attribute 'value'. Did you mean: 'values'? 我想我已经明白了,使用 xsd.AnyObject 来设置。 我尝试了多种与 get_type、get_element 的组合,并使用 **params 和 params 致电服务。一切都以 client.service.ExecuteQuery() 抛出异常结束。 有什么想法我哪里出错了吗? 我找不到以任何有意义的方式使用 AnyObject 的答案。 但是,我确实通过使用 lxml 手动创建“任何”节点上下文来设法使其正常工作。 因此,对于我上面描述的用例: def execute_query(session_token): # Load the WSDL locally - not authorised to get from server wsdl_url = os.path.abspath("querydef_dev.wsdl") history = HistoryPlugin() client = Client(wsdl_url, plugins=[history]) # Construct the query def query_def_element = etree.Element('query_def') query_def_element.set('schema', 'nms:recipient') query_def_element.set('operation', 'select') select_element = etree.SubElement(query_def_element, 'select') node_element = etree.SubElement(select_element, 'node') node_element.set('expr', '@email') node_element2 = etree.SubElement(select_element, 'node') node_element2.set('expr', '"@lastName+"-""+@firstName"') node_element3 = etree.SubElement(select_element, 'node') node_element3.set('expr', 'Year(@birthDate)') order_element = etree.SubElement(query_def_element, 'orderBy') order_node_element = etree.SubElement(order_element, 'node') order_node_element.set('expr', '"@birthDate"') order_node_element.set('expr', 'sortDesc="true') # Construct the final payload data = { "sessiontoken": session_token, "entity": { "_value_1": query_def_element } } # Call the service response = client.service.ExecuteQuery(**data)```
我用 wsimport java 类生成。我导入的 wsdl 请求身份验证。 我用了这个例子: wsimport -Xauthfile C: uth.txt -keep http://example.com/test?wsdl -s c:\path o\sou...
wsdl 生成的 Web 服务客户端无法与已部署的 Web 服务一起使用
我使用 axis2 java2wsdl 实用程序从 java 类生成了 WSDL,如下所示; java2wsdl -o C: emp -cn com.temenos.webservices.customer.CustomerServiceWS 然后我部署了相同的网络...
如何使用 svcutil 从使用限制来隐藏元素的 Web 服务生成 C# WCF 代理?
我正在创建一个或多或少不受我控制的 Web 服务客户端。以下是该架构的简化示例: 我正在创建一个或多或少不受我控制的 Web 服务客户端。这是该架构的简化示例: <xs:complexType name="A"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" name="element1" type="xs:string" /> <xs:element minOccurs="0" maxOccurs="1" name="element2" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:complexType name="B"> <xs:complexContent> <xs:restriction base="A"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="element2" type="xs:string" /> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> 简而言之,我们有一个包含所有元素的对象 A。该服务有多种基于 A 的类型,但有限制,因此继承的类型通常小于基本类型 - 此处以类型 B 为例。 在架构查看器(例如 Visual Studio 2010、SoapUI 等中的查看器)中,这看起来符合预期。 A 有 2 个元素,B 只有 1 个(= 元素 2)。 通过使用 svcutil,我获得了类型 A 和 B 中的完整元素集,或者在使用选项时,我收到错误消息,例如: 错误:无法导入命名空间“http://tempuri.org/XMLSchema.xsd”中的类型“B”。通过限制派生的复杂类型 不支持。更改架构以便类型可以映射到数据协定类型,或者使用 ImportXmlType 或使用 不同的序列化器。 在继承类型中隐藏字段/属性并不是我喜欢的做法/道路,但如果我无法让提供者更改 WSDL,似乎我必须这样做。 是否有 svcutil 的替代方案可以正确处理此问题,或者我是否必须手动编码我的代理? 更新1 正如 John Saunders 所指出的,我没有显示 svcutil 建议的结果。这部分是为了保持帖子简短......但这里是: svcutil schema.xsd /importXmlTypes /datacontractonly 结果: [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] [System.Runtime.Serialization.DataContractAttribute(Name="A", Namespace="http://tempuri.org/XMLSchema.xsd")] public partial class A : object, System.Runtime.Serialization.IExtensibleDataObject { private System.Runtime.Serialization.ExtensionDataObject extensionDataField; private string element1Field; private string element2Field; public System.Runtime.Serialization.ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] public string element1 { get { return this.element1Field; } set { this.element1Field = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] public string element2 { get { return this.element2Field; } set { this.element2Field = value; } } } [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] [System.Xml.Serialization.XmlRootAttribute(IsNullable=false)] public partial class B : object, System.Xml.Serialization.IXmlSerializable { private System.Xml.XmlNode[] nodesField; private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("B", "http://tempuri.org/XMLSchema.xsd"); public System.Xml.XmlNode[] Nodes { get { return this.nodesField; } set { this.nodesField = value; } } public void ReadXml(System.Xml.XmlReader reader) { this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); } public void WriteXml(System.Xml.XmlWriter writer) { System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); } public System.Xml.Schema.XmlSchema GetSchema() { return null; } public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) { System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); return typeName; } } 在 Xml 级别上工作是不可取的,并且会迫使我们编写包装器。从一开始就手动编写代理代码会更容易。 svcutil schema.xsd /serializer:XmlSerializer /datacontractonly 给出以下错误,这就是我要求替代工具的原因。 svcutil schema.xsd /serializer:XmlSerializer /datacontractonly 错误:无法在命名空间“http://tempuri.org/XMLSchema.xsd”中键入“B” 被进口。不支持通过限制派生的复杂类型。 更改架构以便类型可以映射到数据契约 类型或使用 ImportXmlType 或使用不同的序列化程序。 如果您使用 /dataContractOnly 选项导入数据合约 类型并收到此错误消息,请考虑使用 xsd.exe 反而。 xsd.exe 生成的类型可以在 Windows 中使用 申请后的沟通基础 服务合同上的 XmlSerializerFormatAttribute 属性。 或者,考虑使用 /importXmlTypes 选项进行导入 这些类型作为 XML 类型与 DataContractFormatAttribute 一起使用 您的服务合同上的属性。 使用 xsd schema.xsd /c 给出继承 A 的类型 B,而不隐藏 element1: [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/XMLSchema.xsd")] [System.Xml.Serialization.XmlRootAttribute("request", Namespace="http://tempuri.org/XMLSchema.xsd", IsNullable=false)] public partial class B : A { } /// <remarks/> [System.Xml.Serialization.XmlIncludeAttribute(typeof(B))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/XMLSchema.xsd")] public partial class A { private string element1Field; private string element2Field; /// <remarks/> public string element1 { get { return this.element1Field; } set { this.element1Field = value; } } /// <remarks/> public string element2 { get { return this.element2Field; } set { this.element2Field = value; } } } 错误消息告诉您要么使用 /importXmlTypes 开关,要么更改为使用 XmlSerializer。来自帮助: /importXmlTypes - 配置数据协定 用于导入非数据协定类型的序列化程序 作为 IXmlSerialized 类型。 和 /serializer:XmlSerializer - 生成使用 XmlSerializer 用于序列化和 反序列化
wsimport 对 jax-ws-catalog.xml 有什么作用?
我在网上找到的有关 wsimport 的所有文档似乎对于使用目录文件 (jax-ws-catalog.xml) 的某个方面都有点模糊。我的问题是: 当我生成 Web 服务cl...
任何人都可以指导我如何使用 3PL Central API 发出 PHP SOAP 请求吗? 我有 3PL KEY、登录名、密码和设施 ID。客户端给出的文件是 WSDL 文件、XML 请求文件、XML
在 laravel 中使用 Laminas SOAP 生成具有复杂子类型的 WSDL
我正在尝试弄清楚如何在我的 Laravel 中使用 Laminas SOAP 生成多级 wsdl.. 我也阅读了文档和 chatgpt.. 但我仍然困惑如何设置,这是链接: https://...
我尝试了有关通过 Spring Boot 使用 SOAP Web 服务的教程(入门 - 使用 SOAP Web 服务)。但运行 Maven 构建时不会生成类。我完全没问题...
WSDL 中的 <binding> 和 <portType> 有什么区别?
和似乎都定义了一个操作及其消息。我不太明白,为什么它们都是必要的?
使用DefaultWsdl11Definition自动生成wsdl
我在使用 DefaultWsdl11Definition 自动生成 wsdl 时遇到问题 联系服务操作.xsd 我在使用 DefaultWsdl11Definition 自动生成 wsdl 时遇到问题 联系服务操作.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://com/blog/samples/webservices/contactservice" xmlns:Contact="http://webservices.samples.blog.com" targetNamespace="http://com/blog/samples/webservices/Contact" elementFormDefault="qualified"> <xsd:import namespace="http://webservices.samples.blog.com" schemaLocation="Contact.xsd" /> <xsd:element name="ContactRequest"> <xsd:complexType> <xsd:sequence> <xsd:element name="Id" type="xsd:integer" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ContactResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="Contact" type="Contact:Contact" /> </xsd:sequence> </xsd:complexType> </xsd:element> springapp-servlet.xml <mvc:annotation-driven /> <sws:annotation-driven /> <context:component-scan base-package="*" /> <bean id="ContactService" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition"> <property name="schemaCollection"> <bean class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection"> <property name="inline" value="true" /> <property name="xsds"> <list> <value>/xsd/ContactServiceOperations.xsd</value> </list> </property> </bean> </property> <property name="portTypeName" value="ContactService" /> <property name="locationUri" value="http://localhost:8080/SpringWS/ContactService/" /> </bean> web.xml <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>springapp</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springapp</servlet-name> <url-pattern>/jsp/*</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:*.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>webservices</servlet-name> <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> <init-param> <param-name>transformWsdlLocations</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>webservices</servlet-name> <url-pattern>*.wsdl</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>webservices</servlet-name> <url-pattern>/ContactService/*</url-pattern> </servlet-mapping> 我可以正常启动 Tomcat。然后,我访问这个网址: http://localhost:8080/SpringWS/ContactService/contactService.wsdl 并且浏览器显示空白页面而不是生成的 wsdl。 也许我的配置有问题。有什么想法可以帮助我吗? 谢谢 更正了这个问题,ContactService.wsdl localhost:8080/SpringWS/ContactService/ContactService.wsdl 问题出在您的 web.xml 文件上。尝试为 DispatcherServlet 和 MessageDispatcherServlet 使用不同的上下文文件。 <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> ...... .... <servlet> <servlet-name>webservices</servlet-name> <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> <init-param> <param-name>transformWsdlLocations</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springws-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 我在运行 Spring Boot 演示时也有类似的经历。如果您的问题和我的一样,那么它is有效。 Spring 发送带有 xml 标头的 wsdl,即 <?xml version="1.0" encoding="UTF-8" standalone="no"?><wsdl:definitions ... 我使用的是 Firefox,它会在显示空白屏幕之前闪烁 wsdl。因此,查看页面源代码会显示完整的 wsdl 文件。 有一个使用 Spring Boot 注释执行此操作的简单可下载示例: https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-webservices
如何使用 wsimport 从 WSDL 文件中仅获取源文件
当我尝试使用 wsimport http://www.webservicex.net/geoipservice.asmx?WSDL 时,该命令仅生成 .class 文件。 当我尝试使用 wsimport -keep -s 目录 http://www.webservicex.net/
我有两个文件,一个是Web服务描述(wsdl),第二个是Web服务中使用的数据结构(xsd)。我什么都没有了,网络服务还不能工作。我需要将它们合并为一个,因为...
当我尝试通过网络服务提交请求时,出现以下异常。 堆栈跟踪如下: 线程“主”com.sun.xml.internal.ws.client.ClientTransportExcep 中出现异常...
我是android的新用户。我想使用肥皂网络服务。我找到了很好的例子,但它们对我不起作用:-( 这是我的网络服务的网址: http://parsnerkh.com/webservice/server.wsdl? 和
我想要获取 Web 服务的 WSDL 文件,而我唯一拥有的就是它的 URL(如 webservice.example/foo)。 如果我直接使用 URL,则只会传递错误响应。
我正在尝试添加位于此处的 SOAP 端点:http://ds.hitpromo.net/product 但是我收到以下错误: 脚手架代码...错误:错误:无法导入 wsdl:portType 详细信息: 一个
WSDL:如何定义接受任何 XML 文档作为输入和输出的操作/消息(对于 python zeep 客户端)
我必须与某种代理服务进行通信,该服务获取内联的 XML 文档 并进一步传递它。问题是该服务提供了损坏的 WSDL 和 Opera...