当前位置: 首页 > 面试题库 >

WSDL文件上的JAX-WS错误:“错误解析组件's:schema'”

洪飞龙
2023-03-14
问题内容

错误

我在Java项目中使用wsimport来生成三个SOAP Web服务的源。前两个可以正常工作:我使用JAX-WS
Maven插件来获取WSDL文件并生成相应的Java源文件。

对于一个Web服务,此操作失败。我收到以下错误:

[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

罪犯

此WSDL文件与有效文件之间的区别在于错误消息中指出的行(第80、127和142行):

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

注意:wsdl文件的根元素定义“ s”名称空间,因此:

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

我尝试过的

我已经做了研究。看起来其他人也遇到了类似的问题,其解决方案从“只是不使用<s:element ref="s:schema" />”,“使用导入标签”,到一些不知名的解决方案,这些解决方案显然在旧的java.net论坛上(在撤消之前,现代亚历山大Java知识图书馆的纵火)。

  • 我尝试将以下import语句放在包含问题标记的元素中:<s:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd" />。wsimport给我一个新的错误:

    [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 <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 <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 <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

此错误中引用的第108和109行是:(第184-5、199-200行是相似的)

    <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" />
  • 我尝试将jaxws-maven-plugin从1.10升级到2.2。同样的问题。

  • 这是一个可能的解决方案 -我正在尝试找出如何使用JAX-WS Maven插件来实现这一点。有什么提示吗?

结论

有任何想法吗?您需要任何其他信息吗?为了简洁起见,我省略了pom.xml和Service.asmx.wsdl文件,但是如果其中包含更重要的信息,则可以包括它们。

谢谢!

附加物

如果这对任何潜在的回答者有帮助,那么另一个人也有同样的问题。
这是另一个类似的问题。
我不太了解本文,但似乎暗示我必须手动解析SOAP XML!恐怖!


问题答案:

我通过在更新到jaxws-maven-plugin 2.2时将Vivek
Pandey的方法
调整为Maven
来解决了这个问题。我在此重申后代:

摘要

把这个XJB自定义文件(见下文),在默认绑定文件目录下,并设置wsimport的绑定,并http://www.w3.org/2001/XMLSchema.xsd。

XJB定制

上面提到的XML文件xsd.xjb的内容应该在默认的绑定文件目录中,如下所示(贷方为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文件的相关部分,并记录了更改:

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


 类似资料:
  • 我对xml知之甚少或一无所知,因此必须编写一个spring-security.xml文件。我想这个问题与我的xml不遵循XSD有关。下面是XML。 当我试图运行web应用程序时,我得到了一个错误。 spring security xsd

  • 问题内容: 我正在使用webservice soa,使用netbeans(jax- ws),我使用netbeans自动生成客户端,并且一切运行良好,但是我看到在客户端运行时wsdl始终在下载。 在生产中,我不想公开wsdl,并且我试图修改客户端,因为不需要wsdl,我的所有意图都是错误的,我发现了这一点: 但是当执行第一行时,我发现此异常: 有什么想法可以忽略wsdl吗? 问题答案: 最后,我使用

  • 各位议员好。 背景信息:这是一个基于Spring Boot的项目,它使用JAX-RS/Jersey作为RESTHTTP服务器,而不是spring rest。 错误说明和问题: 将一个文件从一台服务器发送到另一台服务器,并收到响应。(很简单吧?)从功能上讲,下面的代码正在运行。但是,发送方得到的不是200响应,而是500个内部服务器错误和以下堆栈跟踪。 调试之后,我注意到响应中包含了receiver

  • 我是一个使用struts2文件上传和我的动作类包含3私人文件与getter和setters 我有一些疑问要澄清 > 每当我使用myFileVariableName“FileName”(如果文件变量是myFile,那么文件名变量是MyFileFileFileName,如果文件是xxx,那么文件名是xxxFileName),我就会得到输出,如果我对此格式(即myFileVariableName“Fil

  • 在将配置单元外部表从RC格式升级为ORC格式并在其上运行MSCK修复表(当我确实从表中选择全部时)时,我得到以下错误- 将RC格式的历史数据迁移到ORC格式的新定义的过程是什么?

  • 我有一个工作正常的JAXB马歇尔/反马歇尔进程,除了这个:有时我必须反马歇尔的文件是空的或者格式化不好,所以反马歇尔抛出一个异常。这是可以的,但是在这个异常之后,我正在解组的文件(源xml文件java对象)被阻塞。我不能用它。 我注意到,在解组异常之后,试图删除或重命名文件时出现了这种情况。如果没有异常发生,文件可以毫无问题地使用,这是应该的。 有没有办法“解除屏蔽”这些文件?我认为必须有任何方法