未定义的元素声明'xs:schema'

时间:2013-09-19 15:02:21

标签: java web-services wsdl wsdl2java wsimport

我对网络服务很新。

我必须为Web服务编写rest Web服务客户端。 Web服务在SoapUI上运行良好。 URL的WSDL文件提供给我。但是当我在Eclipse项目中添加wsdl文件时,它会出现编译错误

src-resolve.4.2: Error resolving component 'xs:schema'. It was detected that 'xs:schema' is in namespace 'http://www.w3.org/2001/XMLSchema', but components from this namespace are not referenceable from schema document 'file:///E:/Ashish%20Workspace/HATStoLSAMS%20Webservice/HATS2LSAMSWS/WebContent/WEB-INF/wsdl/CorpsiteService.svc.wsdl'. If this is the incorrect namespace, perhaps the prefix of 'xs:schema' needs to be changed. If this is the correct namespace, then an appropriate 'import' tag should be added to 'file:///E:/Ashish%20Workspace/HATStoLSAMS%20Webservice/HATS2LSAMSWS/WebContent/WEB-INF/wsdl/CorpsiteService.svc.wsdl'.

我google了很多东西来摆脱这些错误,但没有任何效果。 如果我忽略错误并尝试使用wsimport和wsdl2java命令创建存根 它给出了错误

[ERROR] undefined element declaration 'xs:schema'
line 1 of http://chec.local/STAR.WCF/CorpsiteService.svc?singlewsdl

我使用下面的命令来生成存根

wsimport -d e:\test -s E:\wssrc http://chec.local/STAR.WCF/CorpsiteService.svc?singlewsdl -wsdllocation "../../../../../WEB-INF/wsdl/CorpsiteService.svc.wsdl"

我在这一点上陷入困​​境,并且整天都在努力。 任何有关这方面的帮助都会非常有用

4 个答案:

答案 0 :(得分:7)

此解决方案似乎为xs:schema

中提供的xs提供备用绑定

具体而言,对于经常导入命名空间wsimport -b https://metro.java.net/2.1/guide/Dealing_with_schemas_that_are_not_referenced.html -b customization.xjb something.wsdl的{​​{3}},还需要完成一些额外的工作。

命令为:<?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>

从上面链接的

customization.xjb位于http://www.w3.org/2001/XMLSchema或从下方复制

此自定义用于处理可能因使用架构架构(在多个架构中作为同一名称空间导入)而引起的某些命名冲突。

customization.xjb

-b

我已尝试将这些文件和相关的wsimport参数发送到{{1}},并且已经(显然)已经过了这个错误(并转到其他错误)。也就是说,我并不是100%肯定我的新错误不是由此造成的(因此这不是一个完整的答案)。如果没有实际的wsdl导致问题,人们只能在解决问题时采取合理的猜测(并进入下一个问题)。

答案 1 :(得分:1)

如果您使用的是maven-jaxb2-plugin,则-b提供所需的URL作为模式中的其他模式:

<schema>
  <url>https://example.com/WebService.asmx?WSDL</url>
</schema>
<schema>
  <url>http://www.w3.org/2001/XMLSchema.xsd</url>
</schema>

您甚至可以将其保存在资源中,以便自动将其提取

答案 2 :(得分:0)

我面临着同样的问题,只需在maven插件中添加一行即可解决

  <args> <arg>-b</arg><arg>http://www.w3.org/2001/XMLSchema.xsd</arg>
  </args>

我的maven插件在下面给出

            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>2.4.1</version>
            <executions>
                <execution>
                    <id>periodictableaccessws</id>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                    <configuration>
                        <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
                        <args>
                            <arg>-b</arg><arg>http://www.w3.org/2001/XMLSchema.xsd</arg>
                        </args>
                        <wsdlFiles>
                            <wsdlFile>doosdaas.wsdl</wsdlFile>
                        </wsdlFiles>
                        <packageName>com.dss.doosdaas</packageName>
                        <vmArgs>
                            <vmArg>-Djavax.xml.accessExternalDTD=all</vmArg>
                            <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                        </vmArgs>
                     <!--   <bindingDirectory>${basedir}/src/main/resources/jaxb</bindingDirectory>
                        <bindingFiles>
                            <bindingFile>jaxb_binding.xjb</bindingFile>
                        </bindingFiles>-->
                    </configuration>
                </execution>
            </executions>
        </plugin>

答案 3 :(得分:0)

当我不得不使用一些UE Taxations Customs Web服务时,我会遇到这种错误。在以前的项目中,我使用了user289086

提出的解决方案

但是对于最近的项目,我使用了另一个基于绑定的解决方案,但更简短,我使用的是这里Using JAXB Data Binding中所述的包装程序样式规则。

1-创建一个包含以下内容的绑定文件,并将其添加到META-INF文件夹:

<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
    <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
</jaxws:bindings>

2-使用wsimport从wsdl创建Web服务引用(在我的情况下,我将在后台使用wsimport的Netbeans IDE WS客户助手)用于以下服务: UE CheckTinService

注意:首先也许wsimport的过程可以引发或不引发错误,但是添加或不合并上一个绑定的区别很容易检查。

3-将绑定引用添加到.pom文件中相应的jaxws-maven-plugin执行中。对于示例,它保持如下所示:

<plugin>
    <groupId>org.jvnet.jax-ws-commons</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.3</version>
    <executions>
        <execution>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <wsdlFiles>
                    <wsdlFile>ec.europa.eu/taxation_customs/tin/checkTinService.wsdl</wsdlFile>
                </wsdlFiles>
                <packageName></packageName>
                <vmArgs>
                    <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                </vmArgs>
                <wsdlLocation>https://ec.europa.eu/taxation_customs/tin/checkTinService.wsdl</wsdlLocation>
                <staleFile>${project.build.directory}/jaxws/stale/checkTinService.stale</staleFile>
                <bindingFiles>
                    <bindingFile>${basedir}/src/main/resources/META-INF/TaxationCustomsWsImportBindings.xml</bindingFile>
                </bindingFiles>
            </configuration>
            <id>wsimport-generate-checkTinService</id>
            <phase>generate-sources</phase>
        </execution>
    </executions>
    ...

您可以看到使用之前创建的绑定文件的确切配置:

<bindingFiles>
       <bindingFile>${basedir}/src/main/resources/META-INF/TaxationCustomsWsImportBindings.xml</bindingFile>
</bindingFiles>

4-最后转到刷新de WS Reference,并将所做的更改应用于wsimport的过程。