gpt4 book ai didi

java - Spring - 使用 Web 服务时未加载属性文件中的值

转载 作者:行者123 更新时间:2023-11-30 03:25:42 24 4
gpt4 key购买 nike

我在 Spring 中使用 Web 服务并获取值。为此,我使用 GenericHandler 类设置 Web 服务 XML 的 header ,填充 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类中的值进行硬编码,并且当我尝试以这种方式执行时,效果很好。当我尝试访问该成员变量时,从属性文件加载会给出一个空对象。

我的问题:

  • WSAuthentication 类的实例将由处理程序信息?或者它如何访问 WSAuthentication 类?
  • HandlerInfo 是否获取 Web 服务 header 通过 WSAuthentication 的类实例?
  • 还有其他办法吗这样做?

或者我应该使用反射来初始化类的成员变量吗?请大家帮帮我,谢谢!

最佳答案

根据 Spring 引用手册,附录 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。

关于java - Spring - 使用 Web 服务时未加载属性文件中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30298570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com