Weblogic 11g下部署Java 项目出现QName问题的解决

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      "                           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方法失败。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwfjxw.html