CXF - Проверка схемы на стороне сервера JAX-WS не находит определение элемента - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть веб-сервис, который определяет несколько схем в разделе webTypes.Я определяю операцию read, тип которой определяется в этой схеме:

<xs:schema version="1.0" targetNamespace="http://example.com/webservice/service" xmlns:ns0="http://example.com/webservice/parameter" xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xs:import namespace="http://example.com/webservice/parameter"/>
     <xs:complexType name="read">
        <xs:sequence>
           <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1" />
           <xs:element name="filter" type="ns0:filter" minOccurs="0" maxOccurs="1"/>
           <xs:element name="startIndex" type="xs:int" minOccurs="1" maxOccurs="1" />
           <xs:element name="noOfResults" type="xs:int" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
     </xs:complexType>
     <xs:element name="read" type="tns:read"/>
  </xs:schema>

Затем я активирую проверку схемы в файле конфигурации CXF следующим образом:

<jaxws:endpoint id="dataService" 
                implementor="com.example.webservice.jaxws.endpoint.SIB"
                address="/DataService"
                wsdlLocation="classpath:DataService.wsdl">
                <jaxws:properties>
                    <entry key="schema-validation-enabled" value="true" />
                </jaxws:properties>
</jaxws:endpoint>

Я проверил свойсхема проверки некоторых моих запросов с помощью валидатора SOAPUI, и он работает отлично.Но на стороне сервера, когда запрос получен, я получаю эту ошибку:

Caused by: javax.xml.bind.UnmarshalException
  - with linked exception:
 [org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'name'.]
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:425)
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339)
     at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:768)
     ... 287 more
Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'name'.
     at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
     at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
     at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
     at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
     at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
     at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
     at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
     at org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.startElement(Unknown Source)
     at com.sun.xml.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.startElement(ValidatingUnmarshaller.java:96)
     at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:242)
     at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:176)
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
     ... 289 more

Любая подсказка?Похоже, что валидатор может получить доступ к определению операции чтения.Я не знаю, что делать, потому что на самом деле веб-сервисы работают правильно без проверки схемы, но я хочу избежать проверки параметров в реализации веб-сервисов.

Заранее спасибо,

ПРИМЕЧАНИЕ Я использую CXF 2.3.3 с JAXWS 2.2 и JAXB 2.2.1 в неподтвержденном tomcat 6 с Java 1.6.0.

...