**背景简介:**
该项目是市信用办的一个系统,之前好像是一个石家庄的公司负责的。我属于是半路接手。拿到源码后,根据他们给的简(shao)单(de)明(ke)了(lian)的说明把项目搭起来。结果可想而知,项目文件一片红。于是就开始解决这些错误,好在很多错误都是类似的。经过一番捣鼓,大部分的错误都解决了,有一个Spring跟DWR集成配置的错误,错误信息如下:
~~~
Multiple annotations found at this line:
- schema_reference.4: Failed to read schema document 'http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd', because 1) could not find the document;
2) the document could not be read; 3) the root element of the document is not .
- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:remote'.
~~~
**解决过程:**
遇到以前没见过的错误,第一步肯定就是去网上找解决方案了。于是百度、谷歌双管齐下,倒是找到了不少类似错误的解决方案,逐个试过貌似在我这里都不起作用了。
无奈之下我想起了我们在刚刚做完的项目中,用到了DWR,于是我就找到了当时负责DWR这一块的小伙伴,向他寻求帮助。给他看过具体问题之后,他说我们当时不是用的这种方式,而是用的另一种,他推荐我去官网找找看。接着我就来到了DWR的官网,找到与Spring集成的部分,然后又找到'dwr:remote'标签,最后也没发现有什么特殊的地方。后来因为时间比较晚了,而且在这个问题上花费了很长时间,自己有点烦了,就决定先不理它了,等明天再弄。
第二天上午,学完英语之后我坐在电脑前,看着错误提示,心里想:网上找到的解决方案都没有帮我解决这个问题,很可能是我跟他们的错误表现类似,但造成这种表现的原因不一样呢?于是我看是认真的阅读那几行错误提示。后来发现可能是找不到对应的schema文件。虽然IDE会先去jar包里找,如果找不到还会根据你的配置去网上找。但是也可能由于哪出了问题,导致这两条路都走不通了。于是我想,既然这样的话,那我何不自己手动给你添加一个本地的schema文件呢?
说时迟那时快,想到这里,我以迅雷不及掩耳之势下载了一个schema文件,并手动添加到IDE中。bingo!错误提示消失了,问题解决了。喜出望外、喜大普奔呀!
###
手动添加schema文件,方法如下:
1,依次选择:windwos->preferences->myeclipse->files and editors->xml->xmlcatalog
2,点"add",在出现的窗口中,在**location**中选"File system",然后选择你下载的spring-beans-2.0.xsd,文件
3,回到设置窗口的时候不要急着关闭窗口,应把窗口中的**Key Type**改为Schema location,
4,**Key**改为http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd
**总结:**
网络的力量很强大,周围人的帮助也很重要,不过很多时候还是要靠自己。当一个问题困扰你很长时间的时候,不妨先停下你的脚步,转身换个方向走,换个角度思考。很多时候换个角度想问题,会有完全不一样的结果。
当我们遇到问题的时候不放按照下面的方式去解决:
~~~
while (遇到问题) {
if (以前遇到过) {
根据自己的记忆或者以前的笔记解决问题;
}else if (没遇到过) {
上网找解决方案;
}else if (网上找不到 or 网上的方法无法解决) {
求助身边的人;
}else if (身边的人也无法解决) {
停下来,跳出之前的思路;
认真分析错误信息;
换个角度思考;
}
}
~~~
通常情况下,以上步骤就可以解决你的问题了。如果经历了以上步骤还是不能解决你的问题,那么恭喜你,你很可能遇到了一个非常难的难题。这个时候就是你进步的时候。你可能需要将问题反应给你的项目经理,从而集合更多的人去解决它。
以上就是我的一点小小的感受,希望能对大家有点帮助。
';
(三)Jboss与jdk版本不兼容导致WebService调用出错
最后更新于:2022-04-01 20:09:55
环境:
jdk1.6
Jboss 5.1.0.GA
问题描述:
EJB发布webserivce已经成功,并且能够成功访问wsdl文件;
使用axis1自带的sample/client下的类DynamicInvoker测试,程序报错。
错误信息:
客户端:
~~~
Exception in thread "main" AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: Premature end of file.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
~~~
服务器(Jboss)端错误信息:
~~~
ERROR [SOAPFaultHelperJAXWS] SOAP request exception
java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage
at javax.xml.soap.SOAPMessage.setProperty(Unknown Source)
at org.jboss.ws.core.soap.SOAPMessageImpl.(SOAPMessageImpl.java:87)
at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:215)
at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:193)
at org.jboss.wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:455)
at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:295)
at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:205)
at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:131)
at org.jboss.wsf.common.servlet.AbstractEndpointServlet.service(AbstractEndpointServlet.java:85)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process
(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke
(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
~~~
解决方案:
下载jboss-5.1.0.GA-jdk6,并将JBOSS_HOME\lib\endorsed下的几个以Jboss开头的jar包分别复制到JAVA_HOME\lib\endorsed 和 JRE_HOME\lib\endorsed目录下。两个lib目录中可能都没有endorsed文件夹(反正我的没有),那就自己新建一个。
需要复制的jar包:
jbossws-native-jaxrpc.jar
jbossws-native-jaxws.jar
jbossws-native-jaxws-ext.jar
jbossws-native-saaj.jar
注意:从eclipse启Jboss需要在jre下放置这些包,从外部启Jboss需要在jdk下放置上面的jar包。
开始只注意到客户端报的错误,于是根据错误信息就在网上搜寻解决办法,可是找到的资料千奇百怪,说什么的都有。后来贾琳一句话提醒了我,他问我Jboss报什么错误,这时我才想起来还有Jboss的事呢。后来他把[他之前遇到类似错误的博客](http://blog.csdn.net/shan9liang/article/details/17269269)发给我,我按照上面的办法弄了弄,不过还是发现有点小问题(从外部启Jboss还是报错)。后来参考[一篇网友的博客](http://blog.csdn.net/yuebinghaoyuan/article/details/8660954)解决了这个问题。这篇文章很详细的讲解了出现这个错误的原因,有兴趣的朋友可以看看。