Weblogic11g下调WebService出现的一系列问题

 

Weblogic11g下调WebService出现的一系列问题

 

资源下载(apache-cxf-2.5.9

 

今天在远程测试机上测试前天写的调用WebService接口方法,遇到的问题还真多啊!

首先说明一下weblogic加载jar包的顺序:

 

加载顺序:

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的方法,

以下写在jsp中方便测试:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="org.apache.axis.client.Service" %>
<%@page import="org.apache.axis.client.Call" %>
<%
String endpoint = "http://XXXXXXXXX:8080/localappservice/unicode?wsdl";//这里的X表示IP地址
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName("ucExchange");   //与对方约定好的方法

String xml = "XXXXXXXXXXXX";
String rtn = (String)call.invoke(new Object[]{xml});
%>

发送值:<%=xml %>

返回值:<%=rtn %>


一切就绪后,部署到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接口部署的,这种方法就算了吧,更改接口这种东西存在的缺点就是:如果不是部署自己开发的webservice接口,那么,就会存在沟通的问题。

 

第二种方法:这种方法比较强悍,属于暴力的方法,但确实有效,也是从网上找的思路,但是,具体问题要具体分析,刚开始我就烦了这个错误,才会失败,耽误了几天后,就解决了,这种方法是,直接删除你项目下jar包中包含QName的方法,方法是,用rar打开jar包,直接用rar删除jar包中包含QName的文件,存在QName的jar。

切忌,我这里的QName的路径是javax/xml/namespace/QName,所以,我只要删除相同路径的QName就ok了!!

ok了吗?问题由来了!

报错:aultString: org.xml.sax.SAXException: Bad envelope tag: definitions

 

Caused by: org.xml.sax.SAXException: Bad envelope tag:  definitions  
    at org.apache.axis.message.EnvelopeBuilder.startElement(EnvelopeBuilder.java:71)  
    at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)  
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)  
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)  
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)  
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3084)  
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:912)  
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)  
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)  
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)  
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)  
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)  
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)  
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)  
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)  
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)  
    at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)  
    at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)  
    ... 9 more

 

建议解决方案:使用eclipse/myeclipse后webservice提供的工具:wsdl2java生成客户端代码,然后放入工程进行编译,再更新到测试环境上测试......

 

 

 

 

 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值