第一次开发基于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>
人格
<?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。很简单,但不容易发现错误。