wsdl 相关问题

Web服务描述语言(WSDL)是一种基于XML的人类和机器可读语言,用于描述Web服务。它描述了可用的Web服务方法,消息请求和响应结构,可能的故障以及通信和安全要求。此标记不引用任何名为“wsdl”的工具,例如Microsoft的WSDL.EXE。

JAXB 避免从 XSD 生成重复类

我有一个 xsd,其中有一个名为 toc 的元素在 xsd 中两次。它会导致 java 类生成错误。现在,我想编写 xml 绑定来解决这个问题。 我有一个 xsd,其中有一个名为 toc 的元素在 xsd 中两次。它会导致 java 类生成错误。现在,我想编写 xml 绑定来解决这个问题。 <jaxb:bindings schemaLocation="../DMS_Dokument.Versenden_response.xsd"> <jaxb:bindings node="xsd:element[@name='toc']"> <jaxb:factoryMethod name="TOC"/> </jaxb:bindings> </jaxb:bindings> 我得到的错误是 原因:无法解析schema。应该提供错误消息 为了避免 JAXB 从 XSD 生成重复的类,您可以使用本地或外部绑定为生成的类定义不同的名称。 <jaxb:bindings node="XPATH"> <jaxb:class name="YourDistinctName"/> </jaxb:bindings> Java 类名重复的一个原因是在全局绑定中使用 toplevel 作用域。 注意: localScoping 属性的值可以是 nested 或 toplevel。此属性描述嵌套 XML 模式组件与嵌套模式派生的 JAXB 类或顶级模式派生的 JAXB 类的 JAXB 绑定。为了避免嵌套组件之间的命名冲突,该属性的默认值是嵌套的。当模式组件嵌套太深或应用程序不希望使用嵌套类或使用 JPA 时(JPA 第 2.1 节,实体必须是顶级类),开发人员可以将 localScoping 自定义为 toplevel。 例如,下载此演示 (zip) 并考虑其 XML 架构 trilogy.xsd,该架构对 Trilogy 书籍进行建模。它在根 trilogy 元素上定义一个 TOC,并为每个 book 定义另一个 TOC。该架构将每个 TOC 定义为匿名类型,并且每个 TOC 都有不同的用途。第一个目录描述了三本书的标题,但第二个目录是每本书的章节列表。两者具有相同的元素名称 <toc>...</toc>,如该 XML 实例 trilogy.xml 所示,但需要不同的 Java 类定义。 当模式被定制为使用 <jaxb:globalBindings localScoping=”toplevel”/> 时,JAXB 会尝试根据一个元素名称生成两种类型,这会导致名称冲突。 为了解决 Java 类名重复问题,演示使用 HiSrc BasicJAXB 项目中的工具来扫描 XSD 并输出这些建议的绑定:trilogy.xjb。例如,这是书 TOC 的装订: <jaxb:bindings node="//xs:element[@name='trilogy']/xs:complexType/xs:sequence/xs:element[@name='book']/xs:complexType/xs:sequence/xs:element[@name='toc']/xs:complexType"> <jaxb:class name="TrilogyBookTocType"/> </jaxb:bindings> 绑定使用 XPATH 选择目标节点,并将 Java 类名称声明为 TrilogyBookTocType。 演示提供了一个 bash 脚本来运行该工具,但它可以像这样手动运行... java -cp \ $HOME/.m2/repository/org/patrodyne/jvnet/hisrc-basicjaxb-tools/2.1.1/hisrc-basicjaxb-tools-2.1.1.jar \ org.jvnet.basicjaxb.util.CreateToplevelXJBindings \ --nested src/main/resources/trilogy.xsd 该工具将其输出发送到 stdout,您可以在其中将其复制/粘贴到绑定文件或架构中。 执行 该演示是一个独立的 Maven 项目。您可以使用以下命令运行测试: mvn -Ptest clean test mvn -Pexec compile exec:java 方法 hisrc-higherjaxb-maven-plugin 配置为使用提供的 trilogy.xsd 模式和绑定文件 trilogy.xjb 生成 JAXB 类。该模式提供了命名空间 "http://org.example/trilogy",JAXB 使用它来使用自己的命名约定创建 Java package 名称。 作为一个选项,可以使用这些 XJC hisrc-basicjaxb-plugins 生成 Java 内置 Object 方法的更高级实现。特别是,示例项目使用 toString 插件来显示未编组的 Trilogy 对象的人类可读表示。 hisrc-basicjaxb-插件 <args> <arg>-no-header</arg> <arg>-XhashCode</arg> <arg>-Xequals</arg> <arg>-XtoString</arg> </args> 注意: 使用 XJC hisrc-basicjaxb-plugins 时,运行时类路径需要 hisrc-basicjaxb-runtime 依赖。 测试 JUnit 测试类 TrilogyTest.java 扫描示例文件并调用方法 checkSample(File sample) 将每个文件提供给测试人员。对于此项目,创建了一个 JAXBContext,并且 samples 路径中的每个文件都被 unmarshaled 为 Trilogy 对象。成功后,每个对象都会被编组以用于日志记录和您的审查。 示范 具有 main(...) 方法的 Java 标准引擎应用程序位于 org.example.trilogy.Main。该应用程序使用以下命令执行: mvn -Pexec compile exec:java -Dexec.args="src/test/samples/trilogy.xml" 免责声明:我是这些HiSrc项目的维护者。

回答 1 投票 0

Zeep 出现 SSL 错误 - 如何更改密码套件?

我正在尝试使用 Zeep 加载 WSDL 文件,但是当我这样做时,我收到以下错误: requests.exceptions.SSLError:HTTPSConnectionPool(主机='api-mte.itespp.org',端口=443):超出最大重试次数

回答 1 投票 0

编译 WSDL 文件时出现错误/警告 - 但生成的 Java 源代码正常 -Java17 spring boot 3.0

我的要求 spring boot 3.0 Java 17。我的代码使用 jaxb2 插件适用于 java 1.8 spring boot 2.7.11。我已将插件更新为 jaxb30-maven-plugin。自动生成的java代码就可以了。构建是

回答 1 投票 0

使用 Ruby SOAP 忽略 SSL 错误

我正在尝试在 https url 上使用 wsdl。参考如何告诉 Ruby 的 OpenSSL 库忽略自签名证书错误? 当我尝试这个时: ... OpenSSL::SSL::VERIFY_PEER = 打开...

回答 2 投票 0

WSDL 包含内容

将带有 XSD 的 WSDL 读取到 org.dom4j.io.SAXReader 中的正确方法是什么?有没有办法使用 ZipInputStream 来做到这一点,这样我就不必将其保存到磁盘?

回答 1 投票 0

VB.net 中的 WSDL 复杂类型重复属性

对我的术语表示歉意,我希望我在这里提供足够的信息。我正在 VB.net 中工作,并加载了一个连接的服务 URL,该 URL 拉入了一个 wsdl 文件。复杂类型对象之一...

回答 1 投票 0

如何在一个 WSDL 中创建多个方法并在每个方法中创建唯一的属性?

我不知道如何编写WSDL规范。 我尝试在 Soap UI 中执行此操作。 我不知道如何编写 WSDL 规范。 我尝试在 Soap UI 中执行此操作。 我不知道如何编写 WSDL 规范...

回答 1 投票 0

如何在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)```

回答 1 投票 0

wsimport 生成 java 类 - 401 错误

我用 wsimport java 类生成。我导入的 wsdl 请求身份验证。 我用了这个例子: wsimport -Xauthfile C: uth.txt -keep http://example.com/test?wsdl -s c:\path o\sou...

回答 1 投票 0

wsdl 生成的 Web 服务客户端无法与已部署的 Web 服务一起使用

我使用 axis2 java2wsdl 实用程序从 java 类生成了 WSDL,如下所示; java2wsdl -o C: emp -cn com.temenos.webservices.customer.CustomerServiceWS 然后我部署了相同的网络...

回答 2 投票 0

如何使用 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 用于序列化和 反序列化

回答 1 投票 0

wsimport 对 jax-ws-catalog.xml 有什么作用?

我在网上找到的有关 wsimport 的所有文档似乎对于使用目录文件 (jax-ws-catalog.xml) 的某个方面都有点模糊。我的问题是: 当我生成 Web 服务cl...

回答 1 投票 0

针对 3PL Central 的 PHP SOAP 请求

任何人都可以指导我如何使用 3PL Central API 发出 PHP SOAP 请求吗? 我有 3PL KEY、登录名、密码和设施 ID。客户端给出的文件是 WSDL 文件、XML 请求文件、XML

回答 2 投票 0

在 laravel 中使用 Laminas SOAP 生成具有复杂子类型的 WSDL

我正在尝试弄清楚如何在我的 Laravel 中使用 Laminas SOAP 生成多级 wsdl.. 我也阅读了文档和 chatgpt.. 但我仍然困惑如何设置,这是链接: https://...

回答 1 投票 0

springboot不会从wsdl生成类

我尝试了有关通过 Spring Boot 使用 SOAP Web 服务的教程(入门 - 使用 SOAP Web 服务)。但运行 Maven 构建时不会生成类。我完全没问题...

回答 4 投票 0

WSDL 中的 <binding> 和 <portType> 有什么区别?

和似乎都定义了一个操作及其消息。我不太明白,为什么它们都是必要的?

回答 5 投票 0

使用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

回答 3 投票 0

如何使用 wsimport 从 WSDL 文件中仅获取源文件

当我尝试使用 wsimport http://www.webservicex.net/geoipservice.asmx?WSDL 时,该命令仅生成 .class 文件。 当我尝试使用 wsimport -keep -s 目录 http://www.webservicex.net/

回答 2 投票 0

我可以使用什么工具来合并wsdl和xsd文件?

我有两个文件,一个是Web服务描述(wsdl),第二个是Web服务中使用的数据结构(xsd)。我什么都没有了,网络服务还不能工作。我需要将它们合并为一个,因为...

回答 3 投票 0

在网络服务中获取连接超时异常

当我尝试通过网络服务提交请求时,出现以下异常。 堆栈跟踪如下: 线程“主”com.sun.xml.internal.ws.client.ClientTransportExcep 中出现异常...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.