Spring и несколько схем - PullRequest
       2

Spring и несколько схем

3 голосов
/ 03 августа 2011

У меня в сервлете конфигурация пружины ...

<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. Пожалуйста, поместите Commons XMLSchema в путь к классам.

Spring ws doc раздел 5.3.1: Если вы хотите использовать несколько схем, либо с помощью включений, либо с помощью импорта, вы должны поместить Commons XMLSchema в путь классов. Если Commons XMLSchema находится на пути к классам, вышеуказанный элемент будет следовать за всеми импортами XSD и включать их и встроит их в WSDL как один XSD.

Что означает "Commons XMLSchema"? Как я могу это исправить? Thx.

У меня есть оба XSD-файла на пути к классам (на войне: WEB-INF \ classes \ wsDefinition \ car). Когда я удаляю строку из сервлета, то генерируется доступный wsdl, но когда я хочу создать базу проекта SoapUI на этом wsdl, SopaUI показывает ошибку: невозможно найти properties.xsd.

Ответы [ 2 ]

3 голосов
/ 06 июня 2013

Если кто-то приземлится здесь ... добавьте эту зависимость в ваш pom.xml

<dependency>
  <groupId>org.apache.ws.xmlschema</groupId>
  <artifactId>xmlschema-core</artifactId>
  <version>2.0.1</version>
</dependency>
3 голосов
/ 03 августа 2011

Вам потребуется включить файл jar для проекта Commons XMLSchema в каталог WEB-INF / lib.

...