Pergunta

Usando CXF 2.3.1.

Java gerado a partir de WSDLs usando JAXB.

Usando

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

na configuração do cliente.

Meu teste cria um objeto que não esta exigência específica do 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>

No entanto, a mensagem é organizado e faz todo o caminho através do interceptor de saída da cadeia.

O WSDL é um forma:somente de entrada.

wsdlLocation é especificado em uma anotação no Impls.

Curiosamente, as mensagens de entrada que falham na validação de restrição são bloqueadas pelo interceptor da cadeia durante o unmarshalling.

Eu estou testando no WebLogic.Eu também poderia testar no WebSphere é necessário.

Outros validação XSD falhas (como a ausência de um elemento obrigatório) estão sendo apanhados por uma saída de empacotador.

A razão que nós actualizado para o CXF 2.3.1 a partir de 2.2.6 foi que estávamos a ver com questões similares sobre as mensagens de entrada.Em 2.3.1, completa validação XSD ocorre para mensagens de entrada, mas não de saída queridos.

Aqui está o erro no CXF:

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

Trabalhamos resolver isso usando org.springframework.xml.validação.XmlValidator para validar antes de enviar a mensagem para o CXF interceptor cadeia.Eu estou esperando para correções que usam o CXF interceptor cadeia.No entanto, eu suspeito que este é um bug no CXF.

Foi útil?

Solução

Eu tive problemas semelhantes (CXF 2.2.7) e foi capaz de resolvê-lo adicionando a serviceName e endpointName atributos para o meu <jaxws:client> feijão definição.confira a seção "Configurando uma Mola Cliente (Opção 1)" aqui: https://cwiki.apache.org/CXF20DOC/jax-ws-configuration.html para obter mais informações sobre os atributos.

Nota:Eu também tenho o wsdlLocation atributo definido como bem.Este é provavelmente necessária para CXF para encontrar os XSDs utilizados pelo serviço.

Aqui está um exemplo do que eu tenho:

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

Eu também notei quando eu tive esse problema de todo o esquema foi impresso para o meu arquivo de log pelo org.apache.cxf.wsdl.EndpointReferenceUtils a classe toda vez que o cliente foi invocada.Este comportamento foi embora quando eu configurar meu cliente de feijão como o descrito acima.Eu me pergunto se você está vendo algo assim também...

Outro detalhe que devemos mencionar é que eu tinha um monte de comportamento inesperado do CXF quando eu não uso todos os CXF-desde que as bibliotecas descritas no WHICH_JARS arquivo.Também gostaria de tentar adicioná-los para construir, de modo que eles substituem qualquer servidor ou Java fornecido bibliotecas.Você sempre pode removê-los mais tarde, se eles não forem necessários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top