2017-07-31 3 views
0

Je cours wsimport de cmd avec mes dataBindings dans le fichier bindings.xml. Fondamentalement, j'essaie de remplacer la liaison par défaut pour le type de schéma "datetime" pour générer "java.util.Date" au lieu de "XMLGregorianCalendar".Erreur lors de l'importation de wsimport avec des liaisons JAXB supplémentaires

Voici la commande que j'utilise.

wsimport -keep -verbose -extension -b bindings.xml -wsdllocation http://localhost/wsdl/API http://localhost:8080/cc/API?WSDL -d C:/Users/ab/Desktop/test 

Mon fichier Bindings.xml ressemble à ceci.

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.1" > 
    <globalBindings> 
     <javaType name="java.util.Date" xmlType="xs:dateTime" 
     parseMethod="adapter.DateAdapter.marshal" 
     printMethod="adapter.DateAdapter.unmarshal" /> 
    </globalBindings> 
</bindings> 

Voici ma classe DateAdapter:

package adapter; 

import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 
import javax.xml.bind.DatatypeConverter; 

public class DateAdapter 
{ 
    public static Date unmarshal(String paramString) 
    { 
     return DatatypeConverter.parseDate(paramString).getTime(); 
    } 

    public static String marshal(Date paramDate) 
    { 
     Calendar localCalendar = GregorianCalendar.getInstance(); 
     localCalendar.setTime(paramDate); 
     return DatatypeConverter.printDateTime(localCalendar); 
    } 
} 

wsimport L'exécution génère les fichiers WebService avec un Adapter1.class. Toutefois, la réponse contient l'erreur suivante.

C:\Users\ab\Desktop\test\org\w3\_2001\xmlschema\Adapter1.java:13: package a 
dapter does not exist 
     return (adapter.DateAdapter.marshal(value)); 

Maintenant, mon DateAdapter.class se trouve dans le dossier « adaptateur » au même endroit que je me présente wsimport de.

Je veux savoir pourquoi n'est-il pas capable de lire le DateAdapter? J'ai aussi essayé de garder le fichier à la racine au lieu de dans le dossier mais cela aussi jette une exception similaire.

Répondre

1

Juste une mise à jour sur la façon dont j'ai résolu le problème.

J'ai trouvé deux façons de faire fonctionner la conversion de date.

La commande wsimport utilisée dans les deux cas est mentionnée dans la question. Aussi, j'ai utilisé jdk1.6.0_45 dans les deux cas.

1. Ne pas utiliser une coutume DateAdapter.class

Dans ce cas, je directement utilisé le javax.xml.bind.DatatypeConverter pour le schéma de type datetime. Voici la liaison.

<jaxb:globalBindings> 
    <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" 
    printMethod="javax.xml.bind.DatatypeConverter.printDateTime" /> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

2. En utilisant une coutume DateAdapter.class

je me suis dit que l'utilisation du DateAdapter.java sans instruction package fait JAXB pas en mesure de mettre l'importation pour la DateAdapter dans le Adapter1.class que ça génère. Donc, j'ai mis le DateAdapter.java dans un paquetage (com.test.date) et je l'ai référencé dans les bindings avec le chemin complet comme ci-dessous.

<jaxb:globalBindings> 
    <jaxb:javaType name="java.util.Date" xmlType="xs:dateTime" parseMethod="com.test.date.DateAdapter.unmarshal" 
     printMethod="com.test.date.DateAdapter.marshal"> </jaxb:javaType> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

Le fichier DateAdapter.java ressemble à ceci. Maintenant, cela génère une erreur de compilation mais génère correctement le fichier Adapter1.java (avec l'importation correcte de DateApapter).