【问题标题】:Generate xs:date instead of xs:dateTime for WebParam为 WebParam 生成 xs:date 而不是 xs:dateTime
【发布时间】:2014-08-27 02:41:51
【问题描述】:

我有一个带有网络方法的 jax-ws 网络服务:

@WebMethod
void SetCurrentDate(Date date)

在生成的 wsdl 参数中,日期的类型为 xs:dateTime,但我需要 xs:date。 我尝试了 XmlGregorianCalendar,但它映射到 xs:anySimpleType,我也尝试了 @XmlSchemaType,但它不允许用于参数。 如何使用 xsd:date 而不是 xsd:dateTime 生成 wsdl?

【问题讨论】:

    标签: java xml web-services jaxb jax-ws


    【解决方案1】:

    看起来唯一的方法是使用注解 @RequestWrapper(用于 jax-ws-impl 和 apache cxf):

    @WebMethod
    @RequestWrapper(className = "....SetCurrentDateRequest")
    void SetCurrentDate(Date date)
    

    以及请求包装器:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "setCurrentDateRequest", propOrder = {
        "date"
    })
    public class SetCurrentDateRequest {
    
        @XmlSchemaType(name="date")
        protected Date date;
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    }
    

    CXF/JAXB Code-first service: modify XMLSchemaType of inputs

    【讨论】:

      【解决方案2】:

      @XmlSchemaType 就够了。
      两者都有

      @XmlSchemaType(name = "date")
      protected Date publishDate;  
      

      @XmlSchemaType(name = "date")
      protected XMLGregorianCalendar publishDate;  
      

      生成到type="xs:date"(使用schemagen工具)

      见例子here

      示例 1: 自定义 XMLGregorianCalendar 在字段上的映射。

       //Example: Code fragment
       public class USPrice {
           @XmlElement
           @XmlSchemaType(name="date")
           public XMLGregorianCalendar date;
       }
      
       <!-- Example: Local XML Schema element -->
       <xs:complexType name="USPrice"/>
         <xs:sequence>
           <xs:element name="date" type="xs:date"/>
         </sequence>
       </xs:complexType>
      

      示例 2: 在包级别自定义 XMLGregorianCalendar 的映射

       package foo;
       @javax.xml.bind.annotation.XmlSchemaType(
            name="date", type=javax.xml.datatype.XMLGregorianCalendar.class)
       }
      

      【讨论】:

      • 谢谢,我读到了这个,但我需要为方法参数生成 xsd:date,而不是为类字段。你知道怎么做吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多