Domanda

Utilizzando CXF 2.3.1.

generato Java da WSDL utilizzando JAXB.

con

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

nella configurazione del client.

Il mio test crea un oggetto che non riesce questa particolare esigenza 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>

Tuttavia, il messaggio viene marshalling e rende tutto il percorso attraverso la catena intercettore in uscita.

Il WSDL è unidirezionale. Ingresso sola

wsdlLocation è specificato in un'annotazione nei Impls.

È interessante notare, i messaggi ricevuti che non superano la convalida di questo stesso vincolo vengono bloccati dalla catena intercettore durante unmarshalling.

sto testando su WebLogic. Potrei anche è necessaria prova su WebSphere.

Altri errori di convalida XSD (quali un elemento richiesto mancante) vengono catturati dal marshaller uscente.

La ragione per cui siamo passati ad CXF 2.3.1 da 2.2.6 è stato che abbiamo visto problemi simili sui messaggi in entrata. In 2.3.1, la convalida XSD completa si verifica per i messaggi in entrata, ma non per quelli in uscita.

Ecco il bug in CXF:

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

Abbiamo lavorato intorno a questo utilizzando org.springframework.xml.validation.XmlValidator per convalidare prima di inviare il messaggio alla catena intercettore CXF. Spero in correzioni che utilizzano la catena intercettore CXF. Tuttavia, ho il sospetto che questo è un bug in CXF.

È stato utile?

Soluzione

Ho avuto problemi simili (CXF 2.2.7) ed è stato in grado di risolverlo aggiungendo gli attributi serviceName e endpointName alla mia definizione <jaxws:client> di fagioli. controllare la sezione "Configurazione di un client Primavera (opzione 1)" qui: https: / /cwiki.apache.org/CXF20DOC/jax-ws-configuration.html per ulteriori informazioni sugli attributi.

Nota: Ho anche l'attributo wsdlLocation definito pure. Questo è probabilmente necessaria per CXF per trovare i XSD utilizzati dal servizio.

Ecco un esempio di quello che ho:

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

Ho anche notato che quando ho avuto questo problema l'intero schema è stato stampato nel mio file di log da parte della classe org.apache.cxf.wsdl.EndpointReferenceUtils ogni volta che il client è stato invocato. Questo comportamento è andato via quando ho installato il mio fagiolo cliente come quello di cui sopra. Mi chiedo se stai vedendo qualcosa di simile anche ...

Un altro dettaglio Devo dire è che ho avuto un sacco di comportamento imprevisto da CXF quando non ho usato tutte le librerie CXF-forniti delineati nel file WHICH_JARS. Vorrei anche provare aggiungendoli alla compilazione in modo che hanno la precedenza su qualsiasi server o Java fornite librerie. È sempre possibile rimuovere in un secondo momento se non sono necessarie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top