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 %>
可是,当启动程序的时候,运行到调用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接口部署的,这种方法就算了吧,更改接口这种东西存在的缺点就是:若是不是部署本身开发的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