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

问题描述 投票:0回答:1

我第一次基于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>

Person.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>

[能否请您帮我找出无法使用的原因?

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

java xml soap xsd wsdl
1个回答
0
投票

好吧,我终于找到了一个问题,所以我要描述一下,以防将来有人遇到它。

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