春天和春天多个模式

时间:2011-08-02 20:05:33

标签: java spring-ws

我的servlet中有弹簧配置...

<context:component-scan base-package="org.knowledgebase.webservice"/>
<sws:annotation-driven/>

<sws:dynamic-wsdl id="carService"
                  portTypeName="carService"
                  locationUri="/carService/">
    <sws:xsd location="classpath:/wsDefinition/car/properties.xsd"/>
    <sws:xsd location="classpath:/wsDefinition/car/carServiceSimple.xsd"/>
</sws:dynamic-wsdl>

<bean class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory">
    <property name="soapVersion">
        <util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_11"/>
    </property>
</bean>

和同一文件夹中的两个XSD - carServiceSimple.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:pro="http://bar.foo/properties"
       targetNamespace="http://bar.foo"
       elementFormDefault="qualified">

<xs:import schemaLocation="properties.xsd" namespace="http://bar.foo/properties"/>

<xs:element name="StoreCarRequest">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="ID" type="xs:string"/>
            <xs:element name="Name" type="xs:string"/>
            <xs:element name="Properties" type="pro:PropertiesType"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:complexType name="StoreCarResponse">
    <xs:sequence>
        <xs:element name="Status" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

<xs:element name="UpdateCarRequest">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="ID" type="xs:string"/>
            <xs:element name="Properties" type="pro:PropertiesType"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:complexType name="UpdateCarResponse">
    <xs:sequence>
        <xs:element name="Status" type="xs:string"/>
    </xs:sequence>
</xs:complexType>
</xs:schema>
  • properties.xsd:

但是在Glassfish 3上部署之后,出现了异常:多个元素需要Commons XMLSchema.Please将Commons XMLSchema放在类路径上。

Spring ws doc section 5.3.1: 如果要使用包含或导入的多个模式,则需要将Commons XMLSchema放在类路径上。如果Commons XMLSchema在类路径上,则上面的元素将遵循所有XSD导入和包含,并将它们作为单个XSD在WSDL中内联。

“Commons XMLSchema”是什么意思?我该如何解决? THX。

我在类路径上有两个XSD文件(在war中:WEB-INF \ classes \ wsDefinition \ car)。当我从servlet中删除行时,生成的wsdl是可访问的,但是当我想在这个wsdl上创建SoapUI项目时,SopaUI显示错误:找不到properties.xsd。

2 个答案:

答案 0 :(得分:3)

您需要在WEB-INF / lib目录中包含Commons XMLSchema项目的jar文件。

答案 1 :(得分:3)

如果有人来到这里......将此依赖项添加到您的pom.xml

<dependency>
  <groupId>org.apache.ws.xmlschema</groupId>
  <artifactId>xmlschema-core</artifactId>
  <version>2.0.1</version>
</dependency>