Weblogic11g下調WebService出現的一系列問題

            

                                  Weblogic11g下調WebService出現的一系列問題html


       今天在遠程測試機上測試前天寫的調用WebService接口方法,遇到的問題還真多啊!java

首先說明一下weblogic加載jar包的順序:web

加載順序:apache

weblogic 11g和以前部署的不同,首先是,他先加載本身的jar包,而後纔是你部署到什麼程序的war包。app

更改加載順序:
jsp

從網上找的的方法是,在你開發的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所引發的問題。

那麼第二個問題來了!ui

QName錯誤:
spa

因爲我這個項目是要連接一樣部署到weblogic下面的webservice,因此個人java程序要有連接這個webservice的方法,.net

如下寫在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

解決方法:刪掉後面的?wsdl去掉後瞬間正常了。
相關文章
相關標籤/搜索