加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Weblogic 11g下部署Java 项目出现QName问题的处理

发布时间:2021-11-25 21:38:08 所属栏目:教程 来源:互联网
导读:Weblogic 11g下部署Java 项目真是问题多多啊,我指的是在eclipse或者myeclipse下开发的Java项目,然后打包成war或者ear部署到weblogic 11g下。 加载顺序: weblogic 11g和之前部署的不一样,首先是,他先加载自己的jar包,然后才是你部署到什么程序的war包。

Weblogic 11g下部署Java 项目真是问题多多啊,我指的是在eclipse或者myeclipse下开发的Java项目,然后打包成war或者ear部署到weblogic 11g下。
 
加载顺序:
 
weblogic 11g和之前部署的不一样,首先是,他先加载自己的jar包,然后才是你部署到什么程序的war包。
 
更改加载顺序:
 
从网上找的的方法是,在你开发的Java项目下的web-inf下,先写一个weblogic.xml的配置,这里的内容是:
 
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE hibernate-configuration PUBLIC   
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app     
http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"   
                       xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">  
    <context-root>/myApp</context-root>  
    <container-descriptor>  
        <prefer-web-inf-classes>true</prefer-web-inf-classes>  
    </container-descriptor>  
</weblogic-web-app>  
“<prefer-web-inf-classes>true</prefer-web-inf-classes>”这里说明:优先加载我们的jar包。这个xml可以解决大多数由于先加载weblogic自己jar所引起的问题。
 
QName错误:
 
由于我这个项目是要链接同样部署到weblogic下面的webservice,所以我的java程序要有链接这个webservice的方法,
 
代码如下:
 
view plaincopy to clipboardprint?
Service service = new Service();   
            // 创建Call对象,Call对象用于调用服务   
            Call call = (Call) service.createCall();   
            // 为Call对象设置WebService的url   
            call.setTargetEndpointAddress(new java.net.URL(SERVICE_URL));   
            // 为Call对象设置调用的方法名 new QName(namespaceName, methodName)   
            call.setOperationName(new QName("http://xxxxxx","functionName"));   
            // 设置service方法的参数类型    
               
            call.addParameter(new QName("http://xxxxxxx","parameters"), org.apache.axis.encoding.XMLType.XSD_STRING, ParameterMode.IN);   
                
            // 设置service方法的返回值类型   
            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);   
            // 调用WebService的方法,并获得返回值   
            String str = "";   
               
            String sendStr = "test";    
            rsStr = (String)call.invoke(new Object[]{sendStr});  
这里是简单说明。
 
一切就绪后,部署到weblogic没问题。
 
但是,当启动程序的时候,运行到调用webservice接口的时候,就出现问题了,具体错误是:
 
Error processing remote invocation: java.lang.LinkageError: loader constraint violation: loader (instance of weblogic/utils/classloaders/Change
 
AwareClassLoader) previously initiated loading for a different type with name "javax/xml/namespace/QName"
 
这是由于调用webservice接口时,引用了QName方法引起的,而且,在weblogic下,存在许多包含QName的jar包,所以就引起了调用QName方法失败。
 
从网上找了很多方法,有一种是更改webservice接口部署的:http://forums.Oracle.com/forums/thread.jspa?threadID=876154
 
这种方法的缺点是,如果不是部署自己开发的webservice接口,那么,就会存在沟通的问题。
 
第二种方法:这种方法比较强悍,属于暴力的方法,但确实有效,也是从网上找的思路,但是,具体问题要具体分析,刚开始我就烦了这个错误,才会失败,耽误了几天后,就解决了,这种方法是,直接删除你项目下jar包中包含QName的方法,方法是,用rar打开jar包,直接用rar删除jar包中包含QName的文件。
 
切忌,我这里的QName的路径是javax/xml/namespace/QName,所以,我只要删除相同路径的QName就ok了!!其他包含QName的jar不管!!!

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读