Question

Utilisation CXF 2.3.1.

Java généré à partir WSDLs en utilisant JAXB.

Utilisation

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

dans la configuration du client.

Mon test crée un objet qui ne cette exigence particulière du 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>

Cependant, le message est rangea et fait tout le chemin à travers la chaîne d'intercepteurs sortant.

Le WSDL est à sens unique:. D'entrée uniquement

wsdlLocation est spécifié dans une annotation dans les Impls.

Fait intéressant, les messages entrants qui ne validation de cette même contrainte sont bloqués par la chaîne d'intercepteurs pendant unmarshalling.

Je teste sur WebLogic. Je pourrais aussi test sur WebSphere est nécessaire.

D'autres échecs de validation XSD (comme un manque élément requis) sont capturés par le placier sortant.

La raison pour laquelle nous sommes passés à CXF 2.3.1 de 2.2.6 était que nous voyons des problèmes similaires sur les messages entrants. Dans 2.3.1, la validation complète XSD se produit pour les messages entrants, mais pas pour les sortants.

Voici le bogue dans CXF:

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

Nous avons travaillé autour de cela en utilisant org.springframework.xml.validation.XmlValidator pour valider avant d'envoyer le message à la chaîne d'intercepteurs CXF. J'espère que pour des solutions qui utilisent la chaîne d'intercepteurs CXF. Cependant, je pense que ce bogue dans CXF.

Était-ce utile?

La solution

J'ai eu des problèmes similaires (CXF 2.2.7) et a été en mesure de le résoudre en ajoutant les serviceName et endpointName attribue à ma définition de haricot <jaxws:client>. consultez la section "Configuration d'un client de printemps (Option 1)" ici: https: / /cwiki.apache.org/CXF20DOC/jax-ws-configuration.html pour plus d'informations sur les attributs.

Note: J'ai aussi l'attribut wsdlLocation défini ainsi. Ceci est probablement nécessaire pour CXF de trouver les XSD utilisés par le service.

Voici un exemple de ce que j'ai:

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

J'ai aussi remarqué quand j'ai eu ce problème tout le schéma a été imprimé à mon fichier journal par la classe org.apache.cxf.wsdl.EndpointReferenceUtils chaque fois que le client a été invoqué. Ce comportement est parti quand je place mon grain de client comme celle-ci. Je me demande si vous voyez quelque chose comme ça aussi ...

Un autre détail que je dois mentionner est que j'avais beaucoup de comportement inattendu de CXF quand je n'ai pas utilisé toutes les bibliothèques fourni CXF-décrites dans le fichier WHICH_JARS. Je voudrais aussi essayer de les ajouter à la construction afin qu'ils remplacent tout serveur ou Java fourni bibliothèques. Vous pouvez toujours les supprimer plus tard si elles ne sont pas nécessaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top