我在春天使用Web服务并获取值。为此,我使用GenericHandler Class为Web服务XML设置标头,以填充XML使用属性文件中的凭据和其他链接并加载它们。但是,我无法将值加载到变量中。这是我的代码,
@Component
Class WSAuthentication extends GenericHandler
{
@Value("${webservice.consumerId}")
private String consumerIdString;
@Override
public QName[] getHeaders()
{
return null;
}
public boolean handleRequest(MessageContext context)
{
.... // SOAP Message context codes
System.out.println(consumerIdString);
// the above line Prints null
}
}
Web Service Handler类如下:
import javax.xml.rpc.handler.HandlerInfo;
import javax.xml.rpc.handler.HandlerRegistry;
import javax.xml.rpc.ServiceException;
public class WSHandler
{
public StubClass addHandlerToGetInfo()
{
....// Web Service stub codes
HandlerRegistry handlerRegistryObject = locatorStubObject.getHandlerRegistry();
List chain = handlerRegistryObject.getHandlerChain((QName)locatorStubObject.getPorts().next());
HandlerInfo handlerInfoObject = new HandlerInfo();
handlerInfoObject.setHandlerClass(WSAuthentication.class);
chain.add(handlerInfoObject);
return stubObject;
}
}
在另一个类中,我使用这个Web服务来获取代码,我在一个注释为另一个bean的@PostProcess的方法中调用此代码,
....// Consuming code goes here
WSHandler wsHandlerObj = new WSHandler();
StubClass stubObj = wsHandlerObj.addHandlerToGetInfo();
// Invoking WS Stub methods to get values
WSResponseClass responseObj = stubObj.getProfile(id);
这里我无法从属性中获取consumerIdString对象,另一方面,我能够对WSAuthentication类中的值进行硬编码,并且当我尝试执行该方式时,它会很好。当我尝试访问该成员变量时,从属性文件加载会给出一个空对象。
我的问题:
或者我应该使用反射来初始化类的成员变量? 请帮帮我,谢谢!
答案 0 :(得分:1)
根据Spring Reference Manual,附录E,基于XML Schema的配置,
<util:properties id="env" location="classpath:application.properties">
是:
的快捷方式<!-- creates a java.util.Properties instance with values loaded from supplied location -->
<bean id="env" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:application.properties"/>
</bean>
这意味着应该通过它们的包含bean来访问这些属性。
我认为你想要实现的是PropertyPlaceholderConfigurer
,应该声明为:
<context:property-placeholder location="classpath:/application.properties"/>
快捷方式:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:/application.properties"/>
</bean>
因为这里的属性可以直接用于配置其他bean。
答案 1 :(得分:1)
您将WSAuthentication设置为Handler,如下所示: 的 handlerInfoObject.setHandlerClass(WSAuthentication.class); 强>
我认为它是将它作为普通bean而不是从Spring ApplicationContext获取,因此没有为@Value注释属性设置值。
只是为了确认注入任何其他Spring bean并看到它的价值。如果为null则表示使用Reflection而不是使用Spring创建WSAuthentication的实例。