2015-10-20 4 views
6

Sto cercando di cambiare schemaLocation nel mio file xjb da utilizzare non un file remoto utilizzando l'URL, ma di utilizzare una copia in locale che è anche sotto il controllo di versione..xsd non fa parte di questa compilation. È questo un errore per .xjb

Così, per esempio il mio file xjb ha qualcosa di simile a

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings 
     xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xsd:ID="JaxbBindingsForWMiddleware" 
     version="2.0"> 

    <jxb:bindings node="/xsd:schema" 
        schemaLocation="http://myserver:80/a/b/c/d/myxsd.xsd"> 

Quando cambio questo per copia locale ad esempio

schemaLocation="../../src/main/resources/myxsd.xsd"> 

mvn clean install fallirà con un messaggio simile a

[WARNING] Causato da: com.sun.istack.SAXParseException2; systemId: file:/E: /somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb; numero riga: 33; columnNumber: 33; "file:/E: /somefolder/somefolder/myjavaproject/target/bindings/mywsdl.wsdl" non fa parte di questa compilation. È un errore per il file ":/E: /somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb"?

Ho notato che sta cercando il mio file wsdl nella directory target. Posso manipolare lo schemaLocation in modo che punti alla directory src. Il percorso quindi esiste ma il messaggio rimane.

posso anche mettere il WSDL nella directory di destinazione, dove java cerca di trovare, ma anche in questo caso, il messaggio rimane lo stesso.

così sembra che le esigenze specifiche che accada qualcosa per renderlo parte di questa compilation. Cosa dovrebbe essere fatto per compilare questo nel modo corretto? successo

risposta

1

Nel mio ambiente (versione 2.2) funzionava solo quando i file erano in cartelle dedicate (schema in src/main/xsd/schema.xsd e binding ind src/main/xsb/binding.xsb) e il file di bind fa riferimento lo schema relativamente: schemaLocation = "../ xsd/schema.xsd"

E 'davvero cuciture ad essere fragili.

0

che ho avuto con

  1. Mettere sia lo schema e attacchi in src/main/risorse

    src/main/resources/myxsd.xsd

    src/main/risorse /mybindings.xjb

  2. Punta il tuo plugin di maven che eseguirà xjc per trovare i file lì

  3. Nelle associazioni di file utilizzo

    schemaLocation = "myxsd.xsd"

Se si desidera aggiungere alcune directory sotto src/main/risorse, si può certamente farlo - si dovrà individuare il percorso relativo appropriato da utilizzare quando si specifica schemaLocation.

0
While looking at problem, I can suggest below steps:<br><br> 
1. Assuming you are using some plugin to generate your stubs. I use cxf-codegen-plugin(you can use any), important step is to define the location of your binding file, let's say its inside a resources\wsdl<br> 
Here is the snippet:<br> 

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-codegen-plugin</artifactId> 
    <version>${cxf.version}</version> 
    <configuration> 
     <encoding>UTF-8</encoding> 
    </configuration> 
    <executions> 
     <execution> 
      <id>generate-sources</id> 
      <phase>generate-sources</phase> 
      <configuration> 
       <wsdlOptions> 
        <wsdlOption> 
         <wsdl>${basedir}/src/main/resources/wsdl/YOUR_WSDL_NAME.wsdl</wsdl> 
         <wsdlLocation>classpath:wsdl/YOUR_WSDL_NAME.wsdl</wsdlLocation> 
         <extraargs> 
          <extraarg>-xjc-Xts</extraarg> 
         </extraargs> 
         <bindingFiles> 
          <bindingFile>${basedir}/src/main/resources/wsdl/binding.xml</bindingFile> 
         </bindingFiles> 
        </wsdlOption> 
       </wsdlOptions> 
      </configuration> 
      <goals> 
       <goal>wsdl2java</goal> 
      </goals> 
     </execution> 
    </executions> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.cxf.xjcplugins</groupId> 
      <artifactId>cxf-xjc-ts</artifactId> 
      <version>${cxf.version}</version> 
     </dependency> 
    </dependencies> 
</plugin> 


2. Così ora con la "mvn generano-sources", Maven hanno idea di dove cercare per il file vincolante. Supponiamo che si sta anche mettendo il file XSD nelle risorse \ cartella WSDL (si può avere alcun percorso)
Vediamo il frammento di binding.xml

<jxb:bindings schemaLocation="YOUR_XSD_FILE.xsd" node="/xs:schema"> 
     ..... 
</jxb:bindings> 


Dal momento che avete già definito il vostro percorso del file vincolante nel plugin maven e anche il tuo xsd si trova in quel percorso, non è necessario definire nuovamente questo percorso in schemaLocation del file di bind.

0

Si inizia a lavorare dopo aggiungo la mia xsd a pom-file di configurazione di un plugin, come questo:

   <bindingDirectory> 
        src/main/resources/binding 
       </bindingDirectory> 

       <bindingFiles> 
        <bindingFile>bindings.xjb</bindingFile> 
        <bindingFile>../xsd/egrul.xsd</bindingFile> 
        <bindingFile>../xsd/arrays.xsd</bindingFile> 
       </bindingFiles>