2010-06-02 25 views
4

Pourriez-vous, s'il vous plaît, aider avec le problème suivant?besoin d'utiliser des classes personnalisées au lieu de générer (par wsimport) dans les services Web

Lors de la génération du code client WS (avec la tâche wsimport ant), toutes les classes sont générées automatiquement dans le même package (par exemple helloservice.endpoint) en tant que service Web, par ex. si mon service Web a la méthode

public Node getNode();

donc la classe helloservice.endpoint.Node est générée. Néanmoins, j'ai ma propre classe helloservice.Node que je veux utiliser dans le service web.

I défini bind.xml fichier:


<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > 
    <bindings node="wsdl:definitions/wsdl:portType[@name='Node']"> 
     <class name="helloservice.Node"/> 
    </bindings> 
</bindings> 

et passer à wsimport tâche en tant que paramètre de liaison, mais obtenir l'erreur:

 [wsimport] [ERROR] XPath evaluation of "wsdl:definitions/wsdl:portType[@name='Node']" results in empty target node 
[wsimport] line 2 of file:/C:/work/projects/svn.ct/trunk/jwstutorial20/examples/jaxws/simpleclient/bind.xml 

Quelqu'un pourrait, s'il vous plaît, recommander ce qui ne va pas ici ? Puis-je utiliser mes propres classes dans les classes de services Web générées de cette manière, ou ai-je besoin de plus de complication?

Merci d'avance.

Répondre

5

Pour générer des classes de wsdl, l'utilisation en fourmi:


<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport"> 
<wsimport keep="true" sourcedestdir="..." wsdl="..." wsdllocation="..." xnocompile="true" /> 

Ne pas utiliser « package » attribuer à la tâche fourmi wsimport, donc toutes les classes sont créées dans leurs emballages corrects.

En général, pour personnaliser le package, c'est-à-dire modifier le nom de package généré a.b.c pour nommer x.y.z ajouter un élément à la tâche wsimport et définir le fichier binding.jxb comme suit.


<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <jxb:bindings schemaLocation="schema-for-a.b.c.xsd" node="/xs:schema"> 
     <jxb:schemaBindings> 
      <jxb:package name="x.y.z" /> 
     </jxb:schemaBindings> 
    </jxb:bindings> 
</jxb:bindings> 

où schéma pour-a.b.c.xsd est le schéma généré par la tâche de wsgen (qui crée wsdl avec des systèmes appropriés).

Plus de détails sur la personnalisation JAXB: http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/JavaWSTutorial.pdf, section "Personnalisation JAXB consolidations"

+1

+1 pour ne pas mentionner utiliser attribut package. M'a aidé :) – T3rm1