java - jaxws 中的绑定(bind)文件类型转换被忽略

标签 java maven jax-ws jax-ws-customization

我正在尝试使用外部绑定(bind)文件将 XMLGregorianCalendar 转换为 java.util.Date,但它没有转换,它仍然是 XMLGregorianCalendar 而不是 java.util.Date,有人能发现我做错了什么吗?我怀疑我的绑定(bind)文件中有些东西不正确,因为它是在生成 pojo 时被拾取的。

绑定(bind)文件:

<?xml version="1.0" encoding="UTF-8" ?> 
<jaxws:bindings version="2.0" 
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <jaxws:globalBindings> 

        <jaxws:javaType name="java.util.Date" xmlType="xsd:dateTime" 
            parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" 
            printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>

        <jaxws:javaType name="java.util.Date" xmlType="xsd:time" 
            parseMethod="javax.xml.bind.DatatypeConverter.parseTime" 
            printMethod="javax.xml.bind.DatatypeConverter.printTime"/>

        <jaxws:javaType name="java.util.Date" xmlType="xsd:date" 
            parseMethod="javax.xml.bind.DatatypeConverter.parseDate" 
            printMethod="javax.xml.bind.DatatypeConverter.printDate"/> 

    </jaxws:globalBindings>

 </jaxws:bindings>  

pom.xml 中的配置文件:

 <profiles>
    <profile>
      <id>website</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.jvnet.jax-ws-commons</groupId>
              <artifactId>jaxws-maven-plugin</artifactId>
              <version>2.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.jvnet.jax-ws-commons</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>wsimport</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>wsimport</goal>
                </goals>
                <configuration>
                  <packageName>za.co.website.application.model</packageName>
                  <sourceDestDir>src/main/java</sourceDestDir>
                  <wsdlFiles>
                    <wsdlFile>
                      ${basedir}/src/jaxws/wsdl/Application.wsdl
                    </wsdlFile>
                  </wsdlFiles>
                  <target>2.1</target>
                  <bindingFiles>
                    <bindingFile>
                        ${basedir}/src/jaxws/binding/bindings.xml
                    </bindingFile>
                  </bindingFiles>                 
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

调用构建脚本时使用 -X 显示它正在被拾取 mvn clean install -DskipTest -X

...
[DEBUG] The wsdl File is '...\website-application/src/jaxws/wsdl/Application.wsdl' from 'file:/.../website-application/src/jaxws/wsdl/Application.wsdl'
[INFO] Processing: file:/.../website-application/src/jaxws/wsdl/Application.wsdl
[DEBUG] jaxws:wsimport args: [-keep, -s, ...\website-application\src\main\java, -encoding, UTF-8, -Xnocompile, -p, za.co.website.application.model, -target, 2.1, -b, ...\website-application\src\jaxws\binding\bindings.xml]
[INFO] jaxws:wsimport args: [-keep, -s, ...\website-application\src\main\java, -encoding, UTF-8, -Xnocompile, -p, za.co.website.application.model, -target, 2.1, -b, ...\website-application\src\jaxws\binding\bindings.xml, file:/.../website-application/src/jaxws/wsdl/Application.wsdl]
parsing WSDL...
...

最佳答案

添加 node="wsdl:definitions/wsdl:types/xs:schema"jaxws:globalBindings 应该可以解决问题,因此绑定(bind)文件应如下所示:

<?xml version="1.0" encoding="UTF-8" ?> 
<jaxws:bindings version="2.0" 
      xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      node="wsdl:definitions/wsdl:types/xs:schema">

    <jaxws:globalBindings> 
        <jaxws:javaType name="java.util.Date" xmlType="xsd:dateTime" 
            parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" 
            printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>
        <jaxws:javaType name="java.util.Date" xmlType="xsd:time" 
            parseMethod="javax.xml.bind.DatatypeConverter.parseTime" 
            printMethod="javax.xml.bind.DatatypeConverter.printTime"/>
        <jaxws:javaType name="java.util.Date" xmlType="xsd:date" 
            parseMethod="javax.xml.bind.DatatypeConverter.parseDate" 
            printMethod="javax.xml.bind.DatatypeConverter.printDate"/> 
    </jaxws:globalBindings>
</jaxws:bindings>

关于java - jaxws 中的绑定(bind)文件类型转换被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18362269/

相关文章:

Java 使用 Web 服务

java - Spring : How to inject wsdlLocation in @WebServiceRef

java - Poi公式评估

web-services - 如何在 Spring 中配置 jax-ws 处理程序?

java - 通过java更改android中imageView上的图像

java - maven 构建过程在隔离的虚拟机中失败

java - 使用 Spring 引导将 list<object> 传递给 thymeleaf

Maven + jarsigner + 测试类 = 错误

java - Hibernate uuid生成和mysql uuid函数uuid()

java - 根据名称查找子目录和目录