Je crée un client Apache CXF à partir d'un WSDL fourni par un tiers. Lorsque j'exerce le service web en test, je trouve que la sortie du service n'est pas conforme au WSDL.Client Apache CXF généré à partir d'un WSDL inexact
Jusqu'à présent, il semble que, pour certains éléments, le WSDL ne les définit pas comme nillable=true
alors que le service ne les renvoie en fait avec xsi:nil="true"
client Mon CXF ne parvient pas à unmarshall le xml retourné et explose.
J'ai travaillé dans une certaine mesure (en éditant le fichier wsdl fourni), mais je ne vois pas cela comme une solution viable. Les tiers refusent également d'aligner leurs définitions de service et de wsdl, affirmant que d'autres clients gèrent correctement cette fonction en production.
Alors, y a-t-il un moyen de rendre le démantèlement de la réponse moins strict? Quelles autres voies pourrais-je aborder ce problème?
La définition de schéma de l'un des domaines qui me donne un problème est la suivante:
<xsd:element name="cardExpireDate" type="xsd:date"></xsd:element>
Ce champ est retourné par le service (lorsqu'il est appelé à SoapUI) comme <cardExpireDate xsi:nil="true"/>
Lorsque mon code tente d'appeler le service Web, j'obtiens l'erreur suivante (qui est en bas de la trace de la pile mais je crois que c'est la racine du problème)
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[com.sun.istack.SAXParseException2; lineNumber: 1; columnNumber: 1515; ]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:483)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:417)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:394)
at org.apache.cxf.jaxb.JAXBEncoderDecoder.doUnmarshal(JAXBEncoderDecoder.java:855)
at org.apache.cxf.jaxb.JAXBEncoderDecoder.access$100(JAXBEncoderDecoder.java:102)
snip ....
Caused by: javax.xml.bind.UnmarshalException:
- with linked exception:
[java.lang.IllegalArgumentException: ]
... 92 more
Caused by: java.lang.IllegalArgumentException:
at org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl$Parser.parseYear(Unknown Source)
at org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl$Parser.parse(Unknown Source)
et la colonne 1515 du document que je suis en train d'analyser est
<cardExpireDate xsi:nil="true"/>
Avez-vous activé la validation du schéma en définissant schema-validation-enabled sur true? Ensuite, éteignez-le simplement. C'est plus une question JAXB qu'une question CXF. Pouvez-vous poster un exemple concret et un message d'erreur? –
@DennisKieselhorst: Je ne pense pas avoir activé la validation de schéma - je vais juste avec les valeurs par défaut et je pense que j'ai lu que c'était désactivé par défaut. Je vais mettre à jour la question avec des détails plus précis. – DaveH