我对网络服务很新。
我必须为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"
我在这一点上陷入困境,并且整天都在努力。 任何有关这方面的帮助都会非常有用
答案 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的过程。