2017-04-08 76 views
0

我試圖登錄請求,並使用Apache CXF,Log4j的春天登錄使用Apache CXF攔截和log4j的春天

以下SOAP Web服務的響應完整的請求和響應是我的項目結構

enter image description here

我cxf.xml是

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:cxf="http://cxf.apache.org/core" 
xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemalocation="http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 

    <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" id="loggingInInterceptor" /> 
    <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" id="logOutInterceptor" /> 

    <cxf:bus> 
     <cxf:ininterceptors> 
      <ref bean="loggingInInterceptor" /> 
     </cxf:ininterceptors> 
     <cxf:outinterceptors> 
      <ref bean="logOutInterceptor" /> 
     </cxf:outinterceptors> 
    </cxf:bus> 



</beans> 

我bean.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:cxf="http://cxf.apache.org/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
    xsi:schemaLocation="http://cxf.apache.org/core 
         http://cxf.apache.org/schemas/core.xsd 
         http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans.xsd 
         http://cxf.apache.org/jaxws 
         http://cxf.apache.org/schemas/jaxws.xsd"> 

    <import resource="classpath:META-INF/cxf/cxf.xml" /> 
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 

    <jaxws:endpoint id="bookShelfService" 
     implementor="com.test.services.BookShelfServiceImpl" address="/bookshelfservice" /> 

</beans> 

log4j.properties

# Root logger option 
log4j.rootLogger=INFO, file, stdout 

# Direct log messages to a log file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=C:\\wsimport\\log.txt 
log4j.appender.file.MaxFileSize=1MB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

# Direct log messages to stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

我org.apache.cxf.Logger

org.apache.cxf.common.logging.Log4jLogger 

和web.xml

<web-app version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/beans.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>CXFServlet</servlet-name> 
     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 

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

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

</web-app> 

我上面所有的事情做,但請求和我的頭

我使用Tomcat部署我的應用程序和使用的soapUI執行服務業務的響應還是我沒有得到日誌。

我在做什麼錯在這裏?

請建議。

但是,當我執行下面的代碼我收到預期的結果在Eclipse控制檯

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
     factory.setServiceClass(BookShelfService.class); //the service SEI 
     factory.setAddress("http://localhost:8080/springapp/bookshelfservice"); 

     factory.getInInterceptors().add(new LoggingInInterceptor()); 
     factory.getOutInterceptors().add(new LoggingOutInterceptor()); 

     BookShelfService client = (BookShelfService) factory.create(); 

     BookVO reply = client.getBook("b1"); 
     System.out.println("Server said: " + reply.getAuthor()); 
+0

請注意,您所使用的攔截器在CXF 3.2.0被棄用:https://cxf.apache.org/javadoc/latest/org/apache/cxf/interceptor/LoggingInInterceptor.html。如果您擔心,請改用org.apache.cxf.ext.logging.LoggingInInterceptor(和LoggingOut)。 – lpratlong

回答

1

我敢肯定,你不需要創建自己的cxf.xml它已經提供cxf-core jar。所以我認爲你不應該覆蓋它。因爲它會創建一個新的Spring總線,可能無法用cxf方式正確配置。刪除該cxf.xml以避免混淆,只需在您的bean.xml中導入cxf.xml,然後將您的cxf.xml代碼放入您的bean.xml中。嘗試使用此更新的bean.xml。

 <?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:cxf="http://cxf.apache.org/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
     xsi:schemaLocation="http://cxf.apache.org/core 
          http://cxf.apache.org/schemas/core.xsd 
          http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://cxf.apache.org/jaxws 
          http://cxf.apache.org/schemas/jaxws.xsd"> 

     <import resource="classpath:META-INF/cxf/cxf.xml" /> 
     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 

<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" id="loggingInInterceptor" /> 
    <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" id="logOutInterceptor" /> 

    <cxf:bus> 
     <cxf:ininterceptors> 
      <ref bean="loggingInInterceptor" /> 
     </cxf:ininterceptors> 
     <cxf:outinterceptors> 
      <ref bean="logOutInterceptor" /> 
     </cxf:outinterceptors> 
    </cxf:bus> 



     <jaxws:endpoint id="bookShelfService" 
      implementor="com.test.services.BookShelfServiceImpl" address="/bookshelfservice" /> 

    </beans>