注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

Java中的SPI(Service Provider Interface)  

2013-09-18 10:48:40|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      碰到一个问题,一个web service客户端,使用其中一个方法,参数是date类型,调用这个方法得到需要的数据。项目在本地tomcat中能够正常返回值,部署到测试服务器,linux weblogic 12下,这个方法无法正常返回值。同个web service客户端中的其他方法没有这个问题,程序执行也没有异常。最后在总监指导下,了解到,应该是对返回的xml数据解析的时候出了问题。tomcat功能较简单,对于xml格式数据直接使用jdk中的类进行解析了。weblogic自身带有解析xml格式数据的工具,但在解析某些格式的时候出错了。解决方式是定义服务器使用指定的类去解析xml。
      使用java的spi进行定义,在src/main/resources下建立META-INF/services/目录,新建文件javax.xml.bind.JAXBContext,文件内容是com.sun.xml.bind.v2.ContextFactory。还要配置weblogic.xml,在<prefer-application-resources>中指定刚才的文件
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
    ...
    <container-descriptor>  
        <prefer-application-packages>  
            <package-name>org.slf4j</package-name>
        </prefer-application-packages>
        <prefer-application-resources>
            <resource-name>META-INF/services/com.sun.xml.ws.spi.db.BindingContextFactory</resource-name>
            <resource-name>META-INF/services/javax.xml.bind.JAXBContext</resource-name>
      </prefer-application-resources> 
    </container-descriptor>      
</weblogic-web-app>
      这样重新部署后,之前的方法可以正常返回值了。


      如上配置在weblogic中能正常运行,在tomcat中跑起来就有错误
Error creating JAXBContext for W3CEndpointReference
javax.xml.bind.JAXBException  - with linked exception
ClassNotFoundException com.sun.xml.bind.v2.ContextFactory
jre中rt.jar文件中已经存在com.sun.xml.internal.bind.v2.ContextFactory类,jaxb-impl中才有com.sun.xml.bind.v2.ContextFactory(package中少了internal),weblogic中已经有jaxb对应的实现才不会报错,tomcat中需要加上下面的依赖才能正常启动:
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.7</version>
</dependency>
  评论这张
 
阅读(1253)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017