2015-10-20 64 views
6

Próbuję zmienić schemaLocation w moim pliku, aby nie używać zdalnego pliku za pomocą adresu URL, ale używać lokalnej kopii, która jest również pod kontrolą wersji..xsd nie należy do tej kompilacji. Czy jest to błąd dla .xjb

Tak na przykład mój plik xjb ma coś podobnego do

<?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"> 

Kiedy zmienić na lokalnej kopii na przykład

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

mvn clean install zakończy się niepowodzeniem z komunikatem podobnym do

[OSTRZEŻENIE] Spowodowane przez: com.sun.istack.SAXParseException2; systemId: file:/E: /somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb; numer linii: 33; columnNumber: 33; "file:/E: /somefolder/somefolder/myjavaproject/target/bindings/mywsdl.wsdl" nie należy do tej kompilacji. Czy jest to błąd dla pliku "file:/E: /somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb"?

Zauważyłem, że szuka mojego pliku wsdl w katalogu target. Mogę manipulować schemaLocation w taki sposób, aby wskazywał na katalog src. Ścieżka istnieje, ale wiadomość pozostaje.

Mogę również umieścić wsdl w katalogu docelowym, gdzie java próbuje go znaleźć, ale w takim przypadku wiadomość pozostaje taka sama.

Wygląda więc na to, że stanie się częścią tej kompilacji. Co należy zrobić, aby skompilować to we właściwy sposób?

Odpowiedz

1

W moim środowisku (wersja 2.2) działało tylko wtedy, gdy pliki znajdowały się w dedykowanych folderach (schemat w src/main/xsd/schema.xsd i bind ind src/main/xsb/binding.xsb) i plik powiązań odwołuje się do schematu relatywnie: schemaLocation = "../ xsd/schema.xsd"

To naprawdę szwy, aby być delikatnym.

0

miałem sukces

  1. Put zarówno schemat i powiązań w src/main/zasobów

    src/main/resources/myxsd.xsd

    src/main/resources /mybindings.xjb

  2. Wskaż swoją wtyczkę maven, która uruchomi Xjc, aby znaleźć tam pliki

  3. W oprawach plików użyj

    schemaLocation = „myxsd.xsd”

Jeśli chcesz dodać kilka katalogów pod src/main/zasobów, można z pewnością należy, że - trzeba będzie znajdź właściwą ścieżkę względną do użycia podczas określania 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. Więc teraz podczas wykonywania "mvn wygenerowania-sources", Maven mają pojęcia, gdzie szukać pliku wiązania. Załóżmy, że jesteś również umieszczenie pliku xsd zasobów \ Folder WSDL (można mieć dowolną ścieżkę)
Zobaczmy fragment binding.xml

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


Skoro masz już zdefiniowane swoje wiążącej ścieżkę we wtyczce maven i twój xsd są również w tej ścieżce, nie musisz ponownie definiować tej ścieżki w schemaLocation twojego pliku powiązania.

0

Zaczyna działać po dodaję moje xsd w pom-pliku w konfiguracji wtyczki, tak:

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

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