【问题标题】:Get rid of JAXBElement in classes generated by wsimport called from ant从 ant 调用 wsimport 生成的类中去掉 JAXBElement
【发布时间】:2010-02-01 14:03:40
【问题描述】:

我有以下问题: 我正在使用 wsimport ant 任务来创建 Web 服务客户端(用于 salesforce.com)。 一切正常,但生成的类都对所有 bean 属性使用这个奇怪的 JAXBElement 类。

例如:

public void setLastName(JAXBElement<String> value) {
    this.lastName = ((JAXBElement<String> ) value);
}

public JAXBElement<String> getCountry() {
    return country;
}

我不想将所有类都包装在 JAXBElement 中,而是希望使用像 setLastName(String newLastName) 这样的简单方法。 这就是我调用 wsimport 任务的方式。

<wsimport debug="false" verbose="false" keep="${keep}" 
   extension="${extension}" destdir="${tmp.metro}" 
   wsdl="${licensing.wsdl}" 
   sourcedestdir="${licensingws.generated.src}"

   >

   <binding dir="${basedir}/etc" includes="${client.binding}"   
     />
    <arg value="-B-XautoNameResolution" />

  </wsimport>

任务是这样定义的:

有人知道我必须设置什么以便 wsimport 以我想要的方式生成类吗? 提前非常感谢!!!

【问题讨论】:

    标签: java web-services ant jaxb wsimport


    【解决方案1】:

    在生成的 bean 中使用 JAXBElement 包装器的原因可能是 WSDL 声明该字段是可选的和可空的。为了区分“不存在”和“存在,但为空”,不能直接使用字符串类型,因为这两种情况下的字符串都是空的。

    如果不需要区分这两种情况,可以configure the code generator改用String类型。我不能 100% 确定如何使用 ant 任务执行此操作,但您可能会在 ant 任务文档中找到相关信息。

    【讨论】:

    【解决方案2】:

    你必须customize the binding

    【讨论】:

      【解决方案3】:

      我也遇到过类似的问题。

      我在天花板 wsimport 时使用了以下绑定 XML:参考此 link

      绑定文件

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

      wsimport 命令示例:

      wsimport -keep  <WSDL_location>  -b employerServiceWSD
      L_binding.xjb
      

      注意:employerServiceWSDL_binding.xjb 包含上述绑定xml 条目。

      希望它也适用于其他人。

      【讨论】:

        【解决方案4】:

        解决方案是使用'Binding'文件,并为每种数据类型添加转换器。下面是我的示例,您可以根据您的 WSDL 修改 javaType。此外,教程指出了如何正确从 wsdl -> java POJO 传递的方法。

        <?xml version="1.0" encoding="UTF-8"?>
        <jaxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                       xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
                       jaxb:version="1.0"
                       xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
            <jaxb:globalBindings generateElementProperty="false">
            <jaxb:serializable uid="1"/>
            <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
                parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
                printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/> 
            <jaxb:javaType name="java.util.Calendar" xmlType="xs:date"
                        parseMethod="javax.xml.bind.DatatypeConverter.parseDate" 
                        printMethod="javax.xml.bind.DatatypeConverter.printDate" />
            <jaxb:javaType name="java.util.Calendar" xmlType="xs:time"
                        parseMethod="javax.xml.bind.DatatypeConverter.parseTime" 
                        printMethod="javax.xml.bind.DatatypeConverter.printTime" />
         </jaxb:globalBindings>
        </jaxb:bindings>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-30
          • 1970-01-01
          • 1970-01-01
          • 2011-05-19
          • 1970-01-01
          相关资源
          最近更新 更多