it-swarm.com.de

JAX-WS-Fehler in der WSDL-Datei: "Fehler beim Auflösen der Komponente: Schema" "

Der Fehler

Ich verwende wsimport in einem Java-Projekt, um Quellen für drei SOAP Webdienste zu generieren. Die ersten beiden funktionieren gut: Ich verwende das JAX-WS Maven Plugin, um die WSDL-Datei zu packen und entsprechende Java-Quelldateien zu generieren.

Dies schlägt für einen Webdienst fehl. Ich erhalte folgende Fehlermeldung:

[jaxws:wsimport]
Processing: /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
jaxws:wsimport args: [-s, /home/me/NetBeansProjects/Admin/AdminWeb/target/generated-sources/jaxws-wsimport, -d, /home/me/NetBeansProjects/Admin/AdminWeb/target/classes, -verbose, -catalog, /home/me/NetBeansProjects/Admin/AdminWeb/src/jax-ws-catalog.xml, -wsdllocation, http://erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx?WSDL, -target, 2.0, -extension, -Xnocompile, /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl]
parsing WSDL...


src-resolve.4.2: Error resolving component 's:schema'. It was detected that 's:schema' is in namespace 'http://www.w3.org/2001/XMLSchema', but components from this namespace are not referenceable from schema document 'file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl#types?schema1'. If this is the incorrect namespace, perhaps the prefix of 's:schema' needs to be changed. If this is the correct namespace, then an appropriate 'import' tag should be added to 'file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl#types?schema1'.
  line 80 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl#types?schema1

undefined element declaration 's:schema'
  line 80 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl

undefined element declaration 's:schema'
  line 127 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl

undefined element declaration 's:schema'
  line 142 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl


Der Schuldige

Der Unterschied zwischen dieser und der funktionierenden WSDL-Datei liegt in den Zeilen in der Fehlermeldung (Zeilen 80, 127 und 142):

<s:element ref="s:schema" />

Hinweis: Das Wurzelelement der WSDL-Datei definiert den Namespace "s".

xmlns:s="http://www.w3.org/2001/XMLSchema" 


Was ich versucht habe

Ich habe meine Forschung gemacht. Es sieht so aus, als hätten andere Leute ähnliche Probleme gehabt, mit Lösungen von "einfach nicht <s:element ref="s:schema" /> verwenden", "ein Import-Tag verwenden", mit einer nicht bekannten Lösung, die sich offenbar im alten Java.net-Forum befand (bevor es heruntergefahren wurde) (Brandstiftung der heutigen Alexandrian Library of Java Knowledge).

  • Ich habe versucht, die folgende import-Anweisung direkt in das Element einzufügen, das die Problem-Tags enthält: <s:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd" />. wsimport gibt mir einen neuen Fehler:

    [jaxws:wsimport]
    Processing: /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
    jaxws:wsimport args: [-s, /home/me/NetBeansProjects/Admin/AdminWeb/target/generated-sources/jaxws-wsimport, -d, /home/me/NetBeansProjects/Admin/AdminWeb/target/classes, -verbose, -catalog, /home/me/NetBeansProjects/Admin/AdminWeb/src/jax-ws-catalog.xml, -wsdllocation, http://erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx?WSDL, -target, 2.0, -extension, -Xnocompile, /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl]
    parsing WSDL...
    
    
    Element "{http://www.w3.org/2001/XMLSchema}annotation" shows up in more than one properties.
      line 248 of http://www.w3.org/2001/XMLSchema.xsd
    
    The following location is relevant to the above error
      line 242 of http://www.w3.org/2001/XMLSchema.xsd
    
    Property "Any" is already defined. Use &lt;jaxb:property> to resolve this conflict.
      line 108 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
    
    The following location is relevant to the above error
      line 109 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
    
    Property "Any" is already defined. Use &lt;jaxb:property> to resolve this conflict.
      line 184 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
    
    The following location is relevant to the above error
      line 185 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
    
    Property "Any" is already defined. Use &lt;jaxb:property> to resolve this conflict.
      line 199 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
    
    The following location is relevant to the above error
      line 200 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
    

    Die Zeilen 108 und 109, auf die in diesem Fehler verwiesen wird, sind: (Zeilen 184-5, 199-200 sind ähnlich)

    <s:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
    <s:any minOccurs="1" namespace="urn:schemas-Microsoft-com:xml-diffgram-v1" processContents="lax" />
    
  • Ich habe versucht, ein Upgrade von jaxws-maven-plugin von 1.10 auf 2.2 durchzuführen. Gleiches Problem.

  • Hier ist eine mögliche Lösung - Ich versuche herauszufinden, wie man dies mit dem JAX-WS Maven Plugin implementiert. Irgendwelche Hinweise?


Fazit

Irgendwelche Ideen? Weitere Informationen, die Sie benötigen? Ich habe die Dateien pom.xml und Service.asmx.wsdl aus Gründen der Kürze ausgelassen, könnte sie jedoch einschließen, wenn sie wichtigere Informationen enthalten.

Vielen Dank!


Nachtrag

Hier ist eine andere Person, die das gleiche Problem hat , falls dies für potentielle Antwortende hilfreich ist. Hier ist noch ein ähnliches Problem. Ich verstehe nicht diesen Artikel , aber es scheint zu bedeuten, dass ich die SOAP XML-Datei manuell analysieren muss! Grusel!

22
Nick

Ich habe dieses Problem gelöst, indem ich die Methode von Vivek Pandey an Maven angepasst habe, während ich das jaxws-maven-plugin 2.2 aktualisiere. Ich werde es hier für die Nachwelt wiederholen:

Zusammenfassung

Fügen Sie diese XJB-Anpassungsdatei (siehe unten) in Ihr Standardverzeichnis für Bindungsdateien ein, und legen Sie wsimport fest, um sie zu binden, und http://www.w3.org/2001/XMLSchema.xsd .

XJB-Anpassung

Der Inhalt der oben genannten XML-Datei (xsd.xjb), die in das Standardverzeichnis für Bindungsdateien aufgenommen werden sollte, lautet wie folgt (Gutschrift geht an Kohsuke):

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://Java.Sun.com/xml/ns/jaxb"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xjc="http://Java.Sun.com/xml/ns/jaxb/xjc"
          version="2.0">

  <globalBindings>
    <xjc:simple />
  </globalBindings>

  <bindings scd="~xsd:complexType">
    <class name="ComplexTypeType"/>
  </bindings>

  <bindings scd="~xsd:simpleType">
    <class name="SimpleTypeType"/>
  </bindings>

  <bindings scd="~xsd:group">
    <class name="GroupType"/>
  </bindings>

  <bindings scd="~xsd:attributeGroup">
    <class name="AttributeGroupType"/>
  </bindings>

  <bindings scd="~xsd:element">
    <class name="ElementType"/>
  </bindings>

  <bindings scd="~xsd:attribute">
    <class name="attributeType"/>
  </bindings>
</bindings>

POM

Hier ist der relevante Teil meiner POM-Datei mit Änderungen:

<plugin>
    <!-- CHANGE: updated groupId and version -->
    <groupId>org.jvnet.jax-ws-commons</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution> 
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <!-- CHANGE: added args tag to bind http://www.w3.org/2001/XMLSchema.xsd -->
                <args>
                    <arg>-b</arg><arg>http://www.w3.org/2001/XMLSchema.xsd</arg>
                </args>
                <wsdlFiles>
                    <wsdlFile>erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl</wsdlFile>
                </wsdlFiles>
                <wsdlLocation>http://erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl</wsdlLocation>
                <staleFile>${project.build.directory}/jaxws/stale/Service.asmx.stale</staleFile>
                <!-- CHANGE: added bindingFiles tag to bind XJB customization, located at the default binding files directory, MyProject/src/jaxws/xsd.xjb . -->
                <bindingFiles>
                    <bindingFile>xsd.xjb</bindingFile>
                </bindingFiles>
            </configuration>
            <id>wsimport-generate-egtestreportengine</id>
            <phase>generate-sources</phase>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>javax.xml</groupId>
            <artifactId>webservices-api</artifactId>
            <version>1.4</version>
        </dependency>
    </dependencies>
    <configuration>
        <sourceDestDir>${project.build.directory}/generated-sources/jaxws-wsimport</sourceDestDir>
        <xnocompile>true</xnocompile>
        <verbose>true</verbose>
        <extension>true</extension>
        <catalog>${basedir}/src/jax-ws-catalog.xml</catalog>
        <target>2.0</target>
    </configuration>
</plugin>
15
Nick

Damit Nicks Lösung funktioniert, müssen Sie möglicherweise diese beiden Jvm-Argumente zu Ihrer pom.xml Hinzufügen.

org.xml.sax.SAXParseException; systemId: http://www.w3.org/2001/XMLSchema.xsd ; Zeilennummer: 67; Spaltennummer: 11; Externe DTD: Externe DTD 'XMLSchema.dtd' konnte nicht gelesen werden, da der Zugriff von 'http' aufgrund der durch die accessExternalDTD -Eigenschaft festgelegten Einschränkung nicht zulässig ist.

[WARNUNG] schema_reference: Lesen des Schemadokuments 'xml.xsd' fehlgeschlagen, da der Zugriff 'http' nicht zulässig ist, weil die accessExternalSchema-Eigenschaft die Einschränkung festlegt. Zeile 91 von http: //www.w3 .org/2001/XMLSchema.xsd

Fügen Sie diese einfach Ihrer pom.xml hinzu

-Djavax.xml.accessExternalDTD=all
-Djavax.xml.accessExternalSchema=all

<vmArgs>
    <vmArg>-Djavax.xml.accessExternalDTD=all</vmArg>
    <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
</vmArgs>
7
Andi

Hatte dasselbe Problem mit dem folgenden Befehl behoben:

wsimport -b http://www.w3.org/2001/XMLSchema.xsd -b xsd.xjb service.wsdl

wo xsd.xjb verweist auf:

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://Java.Sun.com/xml/ns/jaxb"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xjc="http://Java.Sun.com/xml/ns/jaxb/xjc"
          version="2.0">

  <globalBindings>
    <xjc:simple />
  </globalBindings>

  <bindings scd="~xsd:complexType">
    <class name="ComplexTypeType"/>
  </bindings>

  <bindings scd="~xsd:simpleType">
    <class name="SimpleTypeType"/>
  </bindings>

  <bindings scd="~xsd:group">
    <class name="GroupType"/>
  </bindings>

  <bindings scd="~xsd:attributeGroup">
    <class name="AttributeGroupType"/>
  </bindings>

  <bindings scd="~xsd:element">
    <class name="ElementType"/>
  </bindings>

  <bindings scd="~xsd:attribute">
    <class name="attributeType"/>
  </bindings>
</bindings>
1
Arpit

Wenn Sie sich nicht wirklich für dieses bestimmte Bit der Modelldaten interessieren, können Sie möglicherweise eine JAXB-Bindungsdatei verwenden, um JAXB anzuweisen, die anstößigen Bits Eigenschaften zuzuordnen, deren Typ ein DOM Element ist, anstatt sie tatsächlich zu binden normale JAXB-Klassen. Der inoffizielle JAXB-Leitfaden enthält einen Abschnitt zu dieser Technik.

1
Ian Roberts

Das scheint endlich für mich zu funktionieren. Ich benutze Apache Maven cfx Plugin

    <plugin>
                <groupId>org.Apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <additionalJvmArgs>
                                -Djavax.xml.accessExternalDTD=all
                            </additionalJvmArgs>
                            <sourceRoot>${basedir}/src/main/generated</sourceRoot> 
                            <wsdlOptions>
                                <wsdlOption>
                                    <extraargs>
                                        <extraarg>-autoNameResolution</extraarg>
                                        <extraarg>-impl</extraarg>
                                        <extraarg>-verbose</extraarg>
                                        <extraarg>-b</extraarg>
                                        <extraarg>http://www.w3.org/2001/XMLSchema.xsd</extraarg>

                                        <extraarg>-p</extraarg>
                                        <extraarg>com.nevado.travelstudio</extraarg>
                                    </extraargs>
                                    <!-- <bindingFiles> <bindingFile>${basedir}/src/main/resources/wsdl/mybindings.xjb</bindingFile> 
                                        </bindingFiles> -->
                                    <wsdl>${basedir}/src/main/resources/wsdl/B2.wsdl</wsdl>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2Java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

zusammen mit diesen Änderungen musste ich die Dateijaxp.properties im Ordner ..Java/jdk/jre/lib mit der folgenden Eigenschaft erstellen

  -Djavax.xml.accessExternalDTD=all
0
Abhishek Galoda