JAX-WS schéma XSD dans différentes URL
J'ai fait un petit service web avec JAX-WS. Le fichier WSDL a des TYPES d'élément de ce genre.
<types>
<xsd:schema>
<xsd:import namespace="http://ws.poc.mawia/" schemaLocation="http://localhost:777/ws/hello?xsd=1"/>
</xsd:schema>
</types>
L'URL du service web est http://localhost:777/ws/hello?wsdl
et XSD est http://localhost:777/ws/hello?xsd=1
.
Le fichier de Schéma XSD dans un endroit différent a le type de données de définitions de ce genre.
...
...
<xs:complexType name="student">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
<xs:element name="rollNo" type="xs:int"/>
</xs:sequence>
</xs:complexType>
...
...
La plupart des fichiers WSDL j'ai vu a généralement la complète XSD définitions à l'intérieur du fichier WSDL lui-même, mais JAX-WS est de la placer dans un endroit différent.
Est-ce la façon dont il devrait être? Comment puis-je configurer JAX-WS pour placer tous XSD définitions dans un fichier WSDL?
OriginalL'auteur Mawia | 2013-04-16
Vous devez vous connecter pour publier un commentaire.
Séparant le XSD à partir du WSDL est le comportement par défaut dans JAX-WS, et vous ne devriez pas avoir besoin de trop s'inquiéter à ce sujet. Up-to-date WS cadres (y compris WCF) sont généralement en mesure de gérer cela. Selon la taille de l'XSD, l'importation, il pourrait faire le WSDL plus lisible pour un humain. Pour un petit service web, il serait certainement plus facile d'avoir un schéma intégré, mais c'est pas trop un problème pour l'importer.
Je ne sais pas de façon directe de faire le runtime intégrer le schéma dans le fichier WSDL, mais il existe une solution de contournement à travers lequel vous pouvez atteindre cet objectif:
types
section de WSDL et de remplacer le schéma d'importation, il yVous pouvez mettre en œuvre 4. par la personnalisation de la
@WebService
annotation. Cela pourrait ressembler à quelque chose comme ceci:Dans le réglage que j'ai ici, c'est une classe.
MyWebService
encore implémente une interface (avec le@WebService
annotation) et les points d'interface avec lesendpointInterface
attribut. Aka:@WebService( endpointInterface="some.package.MyPortType", ...)
OriginalL'auteur joergl
Il n'y a pas quelque chose de mal avec votre approche. WSDL pointant vers un autre wsdl à l'aide de l'URL est très bien.
Si vous ne le voulez pas, mentionner l'emplacement wsdl à l'aide de wsdlLocation attribut @WebService annotation. Mais encore une fois avec cette approche, vous aurez à modifier wsdl manuellement.
OriginalL'auteur Ashay Batwal