`

CXF + Spring 发布WebServicec常见错误

 
阅读更多

1.Can't find the request for http://localhost:8080/myProject/myWebServiceAddress's Observer

 

如果在发布WebService之后,通过如下访问wsdl出现上述错误:

http://localhost:8080//myProject/myWebServiceAddress?wsdl

那么很大可能的原因"/*"这样的servlet-mapping造成的,因此要定义自己的路径,例如:/service/*。

 

	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/service/*</url-pattern>
	</servlet-mapping>

 Spring配置如下:

 

<jaxws:endpoint id="JVTTroubleTicketSession" implementor="#jvtTroubleTicketSessionWSPort"
        address="/sdm" />

  就可以这样访问:http://localhost:8080/myProject/service/ws?wsdl

 

2.org.apache.ws.commons.schema.XmlSchemaException: Unable to locate imported document at 'http://www.w3.org/2006/03/addressing/ws-addr.xsd', relative to 'schema7.xsd'.

解决办法:

1.获取ws-addr.xsd;

2.在META-INF下增加jax-ws-catalog.xml

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
    <rewriteSystem systemIdStartString="http://www.w3.org/2006/03/addressing"
        rewritePrefix="classpath:/schemas/wsdl" />
</catalog>

 其中/schemas/wsdl就是您的ws-addr.xsd相对于classpath的相对路径。如果是WAR工程,META-INF需要放在WEB-INF/classes/META-INF位置。

 

3.JBOSS+CXF会将CXF的正常日志记录为STDERROR日志。

笔者在使用cxf2.2 + jboss4.2 进行工程部署时,系统日志记录会错误的将CXF的正常日志记录为STDERROR日志。

    这是因为CXF默认是使用java.util.logging记录日志,而jboss是采用log4j记录日志,会出现日志级别映射错误。

    解决办法:

    1.在WEB工程的META-INF目录下增加cxf文件夹,在文件夹下创建一个文件命名为org.apache.cxf.Logger

 

        2.在该文件中增加如下内容:org.apache.cxf.common.logging.Log4jLogger

    

        参考地址:http://cxf.apache.org/docs/debugging-and-logging.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics