2016-01-01 22 views
1

使用一个Spring bean我只是想handleMessage()方法被称为在处理-chain.xml中使用一个Spring bean。如何内SOAPHandler

这是我的处理程序,chain.xml:

<jaxws:bindings> 
    <handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> 
     <!-- ====================== --> 
     <!-- service based handlers --> 
     <!-- ====================== --> 
     <handler-chain> 
      <handler> 
       <handler-name>CustomerHandler</handler-name> 
       <handler-class>com.test.ws.handler.CustomerHandler</handler-class> 
      </handler> 
     </handler-chain> 
    </handler-chains> 
</jaxws:bindings> 

而且也这是我CustomerHandler.java类:

public class CustomerHandler implements SOAPHandler<SOAPMessageContext> { 

@Autowired 
public ServiceInvokeUtil serviceInvokeUtil; 

public Set<QName> getHeaders() { 

    return null; 
} 

public void close(MessageContext context) { 

} 

public boolean handleFault(SOAPMessageContext context) { 
    logSoapMessage(context); 
    return false; 
} 

public boolean handleMessage(SOAPMessageContext context) { 


    Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
    SOAPMessage soapMsg = context.getMessage(); 
    // if this is a request, true for outbound messages, false for inbound 
    if (isRequest) { 

     try { 
      SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope(); 
      SOAPHeader soapHeader = soapEnv.getHeader(); 

      // if no header, add one 
      if (soapHeader == null) { 
       soapHeader = soapEnv.addHeader(); 
      } 
      Boolean oa = serviceInvokeUtil.createRecord(SoapUtil.getRecordEntity()); 

      SOAPElement userContextHeader = ConsumerHeaderHelper.createUserContextHeader(context); 
      soapHeader.addChildElement(userContextHeader); 
      } 
      soapMsg.saveChanges(); 




     } catch (SOAPException e) { 
      System.err.println(e); 
     } 

    } else { 

     try { 
      SoapUtil.setSoapResponseHeader(soapMsg.getSOAPHeader()); 
     } catch (SOAPException e) { 
      e.printStackTrace(); 
     } 

    } 
    logSoapMessage(context); 
    return true; 
} 

这是我的弹簧配置xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring 
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd"> 

<context:property-placeholder /> 

<bean id="serviceInvokeUtil" class="com.test.ws.util.ServiceInvokeUtil"> 
</bean> 

当我打电话给web服务时,spring bean serviceInvokeUtil为空。 如何使用serviceInvokeUtil类为handleMessage方法中的弹簧豆?

回答

1

我伸出SpringBeanAutowiringSupport到CustomerHandler类比它解决了。像这样的:公共类CustomerHandler扩展SpringBeanAutowiringSupport实现SOAPHandler {.....

0

Spring将过程@Autowired注解,只有当它会控制实例的创建。换句话说,你的CustomerHandler必须是bean以及ServiceInvokeUtil来强制spring自动装入它。

+0

首先,感谢哟对relpy。我已经试过了。我将SpringHelper类作为spring bean放入spring配置xml中。像这样:但结果是一样的。你有什么不同的想法? – kozmo

相关问题