wsimport:在WSDL中嵌入XSD时添加Binding?

时间:2011-12-02 20:59:59

标签: java xsd wsdl wsimport

我正在尝试从以下 WSDL 生成一些Java代码:http://www.ebi.ac.uk/Tools/services/soap/emboss_needle?wsdl

$ wsimport -keep  "http://www.ebi.ac.uk/Tools/services/soap/emboss_needle?wsdl"

然而,它会生成一些JAXBElement<String>而不是String。所以我尝试使用xjb绑定,如下所述:Get rid of JAXBElement in classes generated by wsimport called from ant

<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
  <jxb:bindings>
    <jxb:globalbindings generateelementproperty="false">
      <jxb:javatype name="java.lang.String" xmltype="xs:string"/>
    </jxb:globalbindings>
  </jxb:bindings>
</jxb:bindings>

但是wsimport引发了一个异常:

$ wsimport -keep -b binding.xjb "http://www.ebi.ac.uk/Tools/services/soap/emboss_needle?wsdl"
[ERROR] The "jxb:globalbindings" customization is not associated with any schema element.
  line 6 of file:/home/lindenb/tmp/WS/biostar14996.xjb

XSD架构嵌入在WSDL文档中。我应该为jxb:schemaLocation提供什么URI?我该如何解决这个问题?

谢谢,

P上。

3 个答案:

答案 0 :(得分:3)

最终我最终得到了:

<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" wsdlLocation="YOUR_WSDL_LOCATION">
    <jxb:globalBindings generateElementProperty="false"/> 
</jxb:bindings>

答案 1 :(得分:1)

EMBL-EBI的EMBOSS针服务(http://www.ebi.ac.uk/Tools/services/soap/emboss_needle?wsdl)及其他大多数分析工具服务(参见http://www.ebi.ac.uk/Tools/webservices/)允许提交参数有三种状态:

  1. 显式值
  2. 空值
  3. 待省略
  4. 这提供了与各种SOAP工具包的兼容性,其中一些工具包只假设这三种行为中的一种或两种。

    这种不幸的副作用是,JAX-WS这样的工具包,它理解有三种状态,需要使用更复杂的表示来处理这个问题。因此,JAXBElement类是必需的。 EMBL-EBI为样本客户端提供源代码,使用JAX-WS作为其InterProScan(SOAP)和NCBI BLAST(SOAP)服务,这些服务对其参数使用相同的模式(参见http://www.ebi.ac.uk/Tools/webservices/tutorials/06_programming/java/soap/jax-ws)。

答案 2 :(得分:0)

我相信你的问题类似于this post;有链接指向您的文档,以及解决方案;基本上,当你绑定WSDL文件时,你需要一个不同的顶级元素;接受的响应也为您提供了命令行。