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