1

我在 JBoss EAP 6 中部署的 Web 服务有问题。我有一个 war 文件,该 war 包含一个 WS,但是,该 war 最初是在 Weblogic 11 AS 中开发和测试的;一切正常,但我的老板说我的战争可以部署在他安装在其他计算机上的其他服务器(JBoss)中。

一切正常,但在响应中,日期不同,我的意思是,在 Weblogic 中,它看起来像这样:

 <birthday class="com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl"> 
  <year>1952</year> 
  <month>4</month> 
  <day>17</day> 
  <timezone>-360</timezone> 
  <hour>0</hour> 
  <minute>0</minute> 
  <second>0</second> 
  <fractionalSecond>0.000</fractionalSecond> 
</birthday>

因此,在 JBoss EAP 6 中,日期出现在更多字段中,如下所示:

<birthday class="org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl"> 
  <orig__year>1944</orig__year> 
  <orig__month>3</orig__month> 
  <orig__day>1</orig__day>
  <orig__hour>0</orig__hour> 
  <orig__minute>0</orig__minute> 
  <orig__second>0</orig__second> 
  <orig__fracSeconds>0.000</orig__fracSeconds> 
  <orig__timezone>-300</orig__timezone> 
  <year>1944</year> 
  <month>3</month> 
  <day>1</day> 
  <timezone>-300</timezone> 
  <hour>0</hour>
  <minute>0</minute> 
  <second>0</second> 
  <fractionalSecond>0.000</fractionalSecond> 
</birthday>

我的问题是,如何切换此数据类型的反序列化器的实现?看起来,Weblogic 使用 JDK 内部类来完成这项工作,但 JBoss 使用它自己的实现。

我读到要向战争档案中添加一个 xml 文件(jboss-deployment-structure.xml),我集成了一个 xml,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
     <exclusions>
      <module name="org.apache.xerces" />
     </exclusions>
     <dependencies>
        <module name="sun.jdk" >
        </module>
      <system>
        <paths>
      <path name="com/sun/org/apache/xerces/internal/jaxp/datatype"/>
        </paths>
      </system>
    </dependencies>
  </deployment>
</jboss-deployment-structure>

如果我理解得很好,那个 xml 避免使用 JBoss XML 实现(xerces),那么我可以使用 JDK 的内部类;但结果是一样的,有什么想法吗?

4

1 回答 1

0

我以这种形式解决我的问题:

我在这个路径中更改了默认的 xerces 实现

{JBOSS_HOME}\modules\system\layers\base\org\apache\xerces\main

我添加了两个文件:jaxp-api-1.4.5.jar 和 jaxp-ri-1.4.5。

在 module.xml 中,我对声明为资源根的 jar 进行了更改,如下所示:

<module xmlns="urn:jboss:module:1.1" name="org.apache.xerces">
    <resources>
        <!--<resource-root path="xercesImpl-2.9.1-redhat-4.jar"/> -->
        <resource-root path="jaxp-ri-1.4.5.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
    </dependencies>
</module>

现在,我的 xml 带有所需的 XMLGregorianCalendar 实现。干杯。

于 2013-09-13T17:24:04.233 回答