2017-02-19 3 views
9

Les commandes wsimport et xjc (toutes deux téléchargées dans le cadre de Java JDK) ignorent le fichier de liaison jaxb fourni lorsque les wsdl/xsds ciblés sont placés sous des chemins spécifiques. Pour reproduire ce comportement, vous pouvez utiliser le chemin C: \ a. Ce répertoire contient les fichiers XSD suivants:xjc/wsimport - Liaison JAXB ignorée

nm.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:include schemaLocation="name.xsd"/> 
<xs:annotation> 
    <xs:documentation xml:lang="en">Annotation</xs:documentation> 
</xs:annotation> 

<xs:element name="name" type="Name"/> 

<xs:complexType name="FName"> 
<xs:sequence> 
    <xs:element name="value" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="LName"> 
<xs:sequence> 
    <xs:element name="value" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 

</xs:schema> 

name.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:complexType name="Name"> 
     <xs:sequence> 
      <xs:element name="FirstName" type="FName"/> 
      <xs:element name="LastName" type="LName"/> 
      <xs:element name="Date" type="xs:date"/> 
     </xs:sequence> 
</xs:complexType> 
</xs:schema> 

bindings.xjb:

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"> 
    <jxb:globalBindings generateElementProperty="false" collectionType="indexed"> 
     <jxb:javaType name="java.util.Date" xmlType="xs:date" parseMethod="com.company.Converter.parseDate" printMethod="com.company.Converter.printDate"/> 
    </jxb:globalBindings> 
</jxb:bindings> 

La commande suivante est utilisée à partir de C: \ a pour générer les artefacts JAXB:

xjc -b bindings.xjb nm.xsd 

La liaison est ignorée. Les classes générées utilisent toujours xs: date au lieu de java.util.Date et la classe d'adaptateur n'est pas générée. Le problème est également reproductible lors de l'utilisation de wsimport avec un fichier wsdl qui importe le fichier XSD.

En renommant un en d, la liaison fonctionne comme prévu. Certains chemins fonctionnent et d'autres pas. Cela semble être aléatoire, aucun motif n'a été identifié. Le comportement est cohérent pour un chemin donné. Ceci a été reproduit sur Windows 10, Windows 7 et machines Unix. La version de Java utilisée était 1.7.0_79. Le nom des fichiers de liaison ne semble pas avoir d'effet, mais le nom des fichiers XSD.

Ce qui pourrait être à l'origine de ce problème et comment cela peut-il être corrigé? Pourquoi le chemin affecte-t-il la liaison? Y a-t-il des solutions de contournement qui peuvent aider à éviter ce problème tout en s'assurant que la liaison ne sera pas ignorée même si le chemin change?

+1

Je ne peux pas reproduire votre problème. Tout d'abord, il semble y avoir un problème avec votre fichier bindings.xjb. La balise de fermeture de est manquante. Il est alors étrange d'avoir la même méthode pour l'analyse et l'impression (le convertisseur doit par exemple utiliser Converter.print comme printMethod). Pouvez-vous donner plus de détails sur la version mineure de JDK7 que vous avez utilisée et sur le répertoire dans lequel vous avez appelé la commande wsimport? Et pourriez-vous s'il vous plaît imprimer la sortie de 'tree/f' dans le répertoire que vous avez appelé wsimport et la sortie de la commande wsimport elle-même? Merci! – boskoop

+0

Bonjour boskoop, merci pour votre réponse. J'ai corrigé la balise de liaison globale et le printMethod (n'affectait pas le problème). J'utilise jdk1.7.0_79. Je vais essayer de reproduire le problème dans un répertoire qui ne divulgue pas d'informations confidentielles et mettre à jour la question. –

+0

Tentative de reproduction avec les exemples wsdls et xsds –

Répondre