gpt4 book ai didi

java - 尝试与端点通信时无法识别 WSDL 类型

转载 作者:行者123 更新时间:2023-12-01 16:22:23 24 4
gpt4 key购买 nike

我第一次开发基于 WSDL 和 Maven 生成的代码的应用程序。我让它在 Tomcat 中工作,我可以访问服务列表 http://localhost:8080/CourseManager/services但是当我尝试发送请求时,我收到以下响应。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Message part {http://benchresources.in/entities/Person}RegisterPersonRequestType was not recognized. (Does it exist in service WSDL?)</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>

请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:per="http://benchresources.in/entities/Person">
<soapenv:Header/>
<soapenv:Body>
<per:RegisterPersonRequestType>
<per:type>student</per:type>
<per:name>Abc</per:name>
<per:surname>Def</per:surname>
</per:RegisterPersonRequestType>
</soapenv:Body>
</soapenv:Envelope>

我仔细检查了端点、命名空间等,一切似乎都没问题 - 正如我所见,这是最常见的问题。下面我放置配置文件。

web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<display-name>CourseManager</display-name>

<!-- Apache CXF servlet -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

<!-- web context param -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/apache-cxf-services.xml</param-value>
</context-param>

<!-- listener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- session timeout -->
<session-config>
<session-timeout>60</session-timeout>
</session-config>

<!-- welcome file list -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>

</web-app>

apache-cxf-services.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://cxf.apache.org/jaxrs ">

<jaxws:endpoint id="courseservice"
implementor="in.benchresources.services.courseservice.CourseService"
address="/course">
</jaxws:endpoint>

<jaxws:endpoint id="personservice"
implementor="in.benchresources.services.personservice.PersonService"
address="/person">
</jaxws:endpoint>

</beans>

人物.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://benchresources.in/entities/Person" xmlns:tns="http://benchresources.in/entities/Person"
elementFormDefault="qualified">

<xsd:simpleType name="personType" final="restriction" >
<xsd:restriction base="xsd:string">
<xsd:enumeration value="student" />
<xsd:enumeration value="lecturer" />
</xsd:restriction>
</xsd:simpleType>

<xsd:element name="GetPersonRequestType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="id" type="xsd:integer" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="GetPersonResponseType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="type" type="tns:personType" />
<xsd:element name="name" type="xsd:string" />
<xsd:element name="surname" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="RegisterPersonRequestType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="type" type="tns:personType" />
<xsd:element name="name" type="xsd:string" />
<xsd:element name="surname" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="RegisterPersonResponseType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="id" type="xsd:integer" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="UnregisterPersonRequestType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="id" type="xsd:integer" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="UnregisterPersonResponseType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="confirmation" nillable="true" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

</xsd:schema>

和 PersonService.wsdl

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://benchresources.in/services/PersonService/"
xmlns:tns="http://benchresources.in/services/PersonService/" xmlns:Person="http://benchresources.in/entities/Person"
name="PersonService">

<wsdl:types>
<xsd:schema targetNamespace="http://benchresources.in/services/PersonService/">
<xsd:import namespace="http://benchresources.in/entities/Person"
schemaLocation="../entities/Person.xsd" />
</xsd:schema>
</wsdl:types>

<wsdl:message name="GetPersonRequest">
<wsdl:part element="Person:GetPersonRequestType" name="parameters" />
</wsdl:message>
<wsdl:message name="GetPersonResponse">
<wsdl:part element="Person:GetPersonResponseType" name="parameters" />
</wsdl:message>
<wsdl:message name="RegisterPersonRequest">
<wsdl:part element="Person:RegisterPersonRequestType" name="parameters" />
</wsdl:message>
<wsdl:message name="RegisterPersonResponse">
<wsdl:part element="Person:RegisterPersonResponseType" name="parameters" />
</wsdl:message>
<wsdl:message name="UnregisterPersonRequest">
<wsdl:part element="Person:UnregisterPersonRequestType" name="parameters" />
</wsdl:message>
<wsdl:message name="UnregisterPersonResponse">
<wsdl:part element="Person:UnregisterPersonResponseType" name="parameters" />
</wsdl:message>

<wsdl:portType name="IPersonService">
<wsdl:operation name="getPersonById">
<wsdl:input message="tns:GetPersonRequest" />
<wsdl:output message="tns:GetPersonResponse" />
</wsdl:operation>
<wsdl:operation name="registerPerson">
<wsdl:input message="tns:RegisterPersonRequest" />
<wsdl:output message="tns:RegisterPersonResponse" />
</wsdl:operation>
<wsdl:operation name="unregisterPerson">
<wsdl:input message="tns:UnregisterPersonRequest" />
<wsdl:output message="tns:UnregisterPersonResponse" />
</wsdl:operation>
</wsdl:portType>

<wsdl:binding name="PersonServiceSOAPBinding" type="tns:IPersonService">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="getPersonById">
<soap:operation soapAction="" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="registerPerson">
<soap:operation soapAction="" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="unregisterPerson">
<soap:operation soapAction="" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>

<wsdl:service name="PersonService">
<wsdl:port name="PersonServicePort" binding="tns:PersonServiceSOAPBinding">
<soap:address
location="http://localhost:8080/CourseManager/services/PersonService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

您能帮我找出它不起作用的原因吗?

编辑:好的,在评论中回答,我发现了一个问题。

最佳答案

好吧,我(终于)发现了一个问题,所以我会描述它,以防将来有人遇到它。

在 apache-cxf-services.xml 文件中的“implementor”变量而不是 PersonService 实现中,我添加了生成的 PersonService 类,该类仅扩展 Service。很简单,但不容易发现错误。

关于java - 尝试与端点通信时无法识别 WSDL 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62234206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com