8
votes

JAXB + Spring WS: "Aucun adaptateur pour le point final" tout en utilisant Jaxbelement

J'ai un service web que je suis en train de mettre en œuvre avec Spring et JAXB. J'ai déjà une poignée de services de travail en utilisant ces deux - mais ce service particulier me donne un moment difficile en raison du format de la réponse. Dans mon XSD, la réponse est défini comme celui-ci (avis qu'il est un seul élément):

<!-- JAXB marshaller to be used by the annotated web services -->
<bean class="org.springframework.ws.server.endpoint.adapter.MarshallingMethodEndpointAdapter">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
  <property name="contextPath" value="dortman.xsd.objects" />
  <property name="mtomEnabled" value="true"/>
</bean> 
</constructor-arg>
</bean> 

<bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory">
<property name="payloadCaching" value="true"></property>
<property name="attachmentCaching" value="true"></property>
</bean>


3 commentaires

À quoi ressemble votre configuration contextuelle? Comment avez-vous configuré le Marshaller Jaxb?


J'ai ajouté cette information au bas de la poste. Je n'avais même pas pensé à l'inclure comme il semble que plusieurs autres services Web déjà. Je pense que j'ai juste besoin de passer à travers et de voir quel printemps fait.


Ce fil a résolu mon problème: [ forum.springsource.org/... ] ( forum.springsource.org/... )


3 Réponses :


0
votes

Vous voyez cette erreur car Jaxb ne sait pas quel nom pour donner l'élément racine lorsque vous retournez un objet de type résultat. Si vous générez vos éléments du schéma, je m'attendrais à ce que vous ayez une classe de servicesPonse que vous pourriez revenir à la place.

Si vous ne pouvez pas obtenir d'objet ServiceResponse, j'aurais pensé que votre approche d'envelopper le résultat dans un jaxbelement devrait fonctionner. Avez-vous vérifié que _serviceresponse_qname est construit avec l'urui d'espace de noms correct?


2 commentaires

Oui, je pensais la même chose. L'URI a l'air bien. Heureusement, j'ai vite compris que si je viens d'inliner l'élément XSD, Jaxb générerait ensuite des cours qui n'ont pas besoin de jaxbelement et que le XML généré est toujours conforme au XSD non allégé. Alors j'ai évoqué le problème. ;)


@RJSANG Pourriez-vous s'il vous plaît jeter un oeil à cette question merci!



7
votes

C'est une question liée à XSD, vous devez corriger votre XSD. Généralement, lorsque vous jouez avec JAXB, ce problème se produira, vous devez définir correctement la demande et la réponse.

Ce problème est résolu. Par exemple, si votre élément de demande d'entrée est «INSERTREQUEST», vous devez donc définir comme p> xxx pré>

précédemment, j'ai été défini comme mentionné ci-dessous: - Alors, quand je crée des haricots Jaxb, il est toujours Crée deux éléments pour cela, quel élément ( INSERTRQUEST code> ou INSERTREQUEQUESTTYPE code>) doit faire référence au point final, c'était le problème. P>

<element name="InsertRequest" type="tns:InsertRequestType"></element>


<complexType name="InsertRequestType">
<sequence>
<element name="GeneralDetails" type="tns:GenralDetailsType"></element>
<element name="FullDetails" type="tns:FullDetailsType"></element>
</sequence>
</complexType>


0 commentaires

1
votes

Lorsque j'ai eu ce problème, la réponse s'est avérée être que j'avais oublié d'inclure la classe d'éléments dans la liste de la catégorie de la catégorie du Spring Jaxb2marshaller. Les ajoutant à la liste corrigée le problème - mais nos éléments ont déjà été configurés avec un type complexe en ligne.


0 commentaires