当前位置: 首页 > 知识库问答 >
问题:

WSDL定制:XMLGregorianCalender到java.util.Date

石正卿
2023-03-14

我有几个wsdl文件,差不多几百个。每当我为它们创建客户机jaxb客户机类时,jaxb就会自动将所有日期/时间字段映射到XMLGregorianCalender。经过大量的谷歌搜索,我发现提供一个单独的绑定文件是唯一的解决方案。

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" >
    <globalBindings>
        <javaType name="java.util.Date" xmlType="xsd:dateTime"  />
    </globalBindings>
</bindings>
import java.util.Date;
import java.util.GregorianCalendar;

import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

import java.util.Calendar;
import javax.xml.bind.annotation.adapters.XmlAdapter;



public class DateAdapter extends XmlAdapter<XMLGregorianCalendar, Date> {

    @Override
    public XMLGregorianCalendar marshal(Date date) throws Exception {
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        gregorianCalendar.setTime(date);
        XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);
        return xmlGregorianCalendar;
    }

    @Override
    public Date unmarshal(XMLGregorianCalendar xmlGregorianCalendar) throws Exception {
        return xmlGregorianCalendar.toGregorianCalendar().getTime();
    }

}
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" >
    <globalBindings>
        <javaType name="java.util.Date" xmlType="xsd:dateTime"
        parseMethod="DateAdapter.marshal"
            printMethod="DateAdapter.unmarshal" />
    </globalBindings>
</bindings>
C:\Users\stuart\Desktop\code>wsimport -s src -d gen -b cust.txt http://localhost:8080/webservice-jaxws/DummyService?wsdl


parsing WSDL...


generating code...


compiling code...

C:\Users\stuart\Desktop\code\src\org\w3\_2001\xmlschema\Adapter1.java:13: cannot find symbol
symbol  : variable DateAdapter
location: class org.w3._2001.xmlschema.Adapter1
        return (DateAdapter.marshal(value));
                ^
C:\Users\stuart\Desktop\code\src\org\w3\_2001\xmlschema\Adapter1.java:17: cannot find symbol
symbol  : variable DateAdapter
location: class org.w3._2001.xmlschema.Adapter1
        return (DateAdapter.unmarshal(value));
                ^
2 errors
compilation failed, errors should have been reported

我将自定义设置保存在wsimport命令中给出的cust.txt中,DateAdapter类源文件也在同一个目录中。这个班没有包裹。下面是我的目录结构。

³   cust.txt
³   DateAdapter.java
³   
ÃÄÄÄgen
³   ÃÄÄÄorg
³   ³   ÀÄÄÄw3
³   ³       ÀÄÄÄ_2001
³   ³           ÀÄÄÄxmlschema
³   ³                   Adapter1.class
³   ³                   
³   ÀÄÄÄwebservice
³       ÀÄÄÄjaxws
³           ÀÄÄÄgenerated
³                   GetBook.class
³                   GetBookResponse.class
³                   ObjectFactory.class
³                   package-info.class
³                   Book.class
³                   BookService.class
³                   BookServiceImpl.class
³                   ReturnBook.class
³                   ReturnBookResponse.class
³                   
ÀÄÄÄsrc
    ÃÄÄÄorg
    ³   ÀÄÄÄw3
    ³       ÀÄÄÄ_2001
    ³           ÀÄÄÄxmlschema
    ³                   Adapter1.java
    ³                   
    ÀÄÄÄwebservice
        ÀÄÄÄjaxws
            ÀÄÄÄgenerated
                    GetBook.java
                    GetBookResponse.java
                    ObjectFactory.java
                    package-info.java
                    Book.java
                    BookService.java
                    BookServiceImpl.java
                    ReturnBook.java
                    ReturnBookResponse.java

共有1个答案

方斌
2023-03-14

通过使用与您所做的相同的绑定声明解决了这个问题,但我的DateAdapter实际上如下所示:

public class DateAdapter {

    private DateAdapter() {}

    public static String marshal(Date date) {
        Calendar cal = GregorianCalendar.getInstance();
        cal.setTime(date);
        return DatatypeConverter.printDateTime(cal);
    }

    public static Date unmarshal(String xmlDate) {
        return DatatypeConverter.parseDate(xmlDate).getTime();
    }
}

它就像一种魅力。XML端我有dateTime,java端我有java.util.Date。我实际上制作了另一个使用java.time.instant而不是Date的程序,我发现这更容易使用。

 类似资料:
  • 这里有一个wsdl服务链接:http://www.webservicemart.com/uszip.asmx?WSDL 如果我运行以下命令: wsimport-s src-d binhttp://www.webservicemart.com/uszip.asmx?WSDL 这个命令在/src目录下产生Java源代码并编译。相对于发出命令的目录的/bin目录中的类文件。这些生成的类可以用来访问远程w

  • 我有一个具有WSDL定义的非常基本的WCF服务,如下所示: 我想添加名称空间xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“根据定义,但我不知道在哪里以及如何。 如何添加该名称空间?非常感谢。

  • 在上一章Spring -WS - First Application中 ,我们使用Spring WS Configuration自动生成了WSDL。 在这种情况下,我们将展示如何使用Spring WS公开现有的WSDL。 步 描述 1 在Spring WS-First Application章节中解释,在com.wenjiangs包下创建一个名为leaveService的项目。 2 在/ WEB-

  • 有问题的webservice的客户机报告说,如果存在此,他们无法生成客户机存根(使用C#)。如何将其更改为?谢了。

  • 下面给出了一个WSDL文件,用于演示简单的WSDL程序。 假设这个服务提供了一个名称为的公共可用函数。 此函数需要单个字符串参数并返回单个字符串问候语。 例如,如果传递参数值为:,那么服务函数将返回问候语:。 示例 HelloService.wsdl 文件的内容如下所示 - 示例分析说明 定义 - 类型 - 使用内置数据类型,它们在XMLSchema中定义。 消息 - - 参数 - 问候的返回值

  • 主要内容:1. WSDL元素,2. WSDL文档结构WSDL将Web服务分解为三个特定的,可识别的元素,这些元素可以在定义后组合或重用。 可以单独定义的WSDL的三个主要元素是 - 类型 操作 绑定 WSDL文档有各种元素,但它们包含在这三个主要元素中,可以作为单独的文档开发,可以将它们组合或重用以形成完整的WSDL文件。 1. WSDL元素 WSDL文档包含以下元素 - 定义 - 它是所有WSDL文档的根元素。 它定义Web服务的名称,声明在整个