Pregunta

El uso de CXF 2.3.1.

Generado Java desde WSDL utilizando JAXB.

Uso

<jaxws:properties>
    <entry key="schema-validation-enabled" value="true" />
</jaxws:properties>

en la configuración del cliente.

Mi prueba crea un objeto que no este requisito particular del WSDL:

<xsd:simpleType name="UUID.Content">
    <xsd:annotation>
        <xsd:documentation xml:lang="EN">
            Universally Unique Identifier
            </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:token">
        <xsd:length value="36" />
        <xsd:pattern
            value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" />
    </xsd:restriction>
</xsd:simpleType>

Sin embargo, el mensaje se marshalled y lo hace todo el camino a través de la cadena de interceptores de salida.

El WSDL es unidireccional:. De sólo entrada

wsdlLocation se especifica en una anotación en los Impls.

Curiosamente, los mensajes entrantes que no validación de esta misma restricción están bloqueados por la cadena interceptor durante unmarshalling.

Estoy probando en WebLogic. Podría también se necesita prueba de WebSphere.

Otros errores de validación XSD (como un elemento requerido desaparecidos) están siendo capturados por el contador de referencias de salida.

La razón de que nos pasaron a CXF 2.3.1 desde 2.2.6 era que estábamos viendo problemas similares en los mensajes entrantes. En 2.3.1, validación XSD completa se produce para los mensajes entrantes, pero no para los salientes.

Aquí está el error en CXF:

https://issues.apache.org/jira/browse/CXF-3233

Hemos trabajado en torno a este mediante el uso de org.springframework.xml.validation.XmlValidator para validar antes de enviar el mensaje a la cadena interceptor CXF. Estoy esperando para revisiones que utilizar la cadena interceptor CXF. Sin embargo, sospecho que esto es un error en CXF.

¿Fue útil?

Solución

He tenido problemas similares (CXF 2.2.7) y fue capaz de resolverlo mediante la adición de los atributos serviceName y endpointName a mi definición de frijol <jaxws:client>. echa un vistazo a la sección "Configuración de un cliente primavera (Opción 1)" aquí: https: / /cwiki.apache.org/CXF20DOC/jax-ws-configuration.html para obtener más información sobre los atributos.

Nota: También tengo el atributo wsdlLocation definido así. Esto es probablemente necesario para CXF para encontrar los XSD utilizados por el servicio.

Este es un ejemplo de lo que tengo:

<jaxws:client id="client"
              serviceClass="com.example.ServiceInterface"
              address="http://example.com/endpoint"
              wsdlLocation="WEB-INF/wsdl/SampleWSDLFile.wsdl"
              serviceName="s:SampleService"
              endpointName="s:SampleServicePort"
              xmlns:s="http://www.example.com/some/namesapce">
...
</jaxws:client>

También notado cuando tuve este problema todo el esquema se ha impreso a mi archivo de registro por la clase org.apache.cxf.wsdl.EndpointReferenceUtils cada vez que se invocó el cliente. Este comportamiento se fue cuando yo configurar mi grano de cliente como la de arriba. Me pregunto si usted está viendo algo como eso también ...

Otro detalle que debo mencionar es que he tenido un montón de comportamiento inesperado de CXF cuando no hizo uso de todas las bibliotecas proporcionadas-CXF descritas en el archivo WHICH_JARS. También me gustaría tratar de agregarlos a la compilación por lo que anula cualquier servidor o Java proporciona bibliotecas. Siempre se puede quitar más adelante si no son necesarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top