我有一个简单的Axis2
客户。我Spring
用作轻型容器。axis2
我的问题是:客户端和之间是否有集成spring
?我过去熟悉org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean
Spring 中的课程,但不知道它是否有效axis2
。
问问题
2266 次
1 回答
0
此链接可以让您大致了解您需要做什么
首先,您需要从axis2 端点生成存根代码。使用maven和axis2的maven插件是这样的:
<plugin>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-wsdl2code-maven-plugin</artifactId>
<version>${axis.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2code</goal>
</goals>
<configuration>
<wsdlFile>{axis2wsdl-url} or src/main/resources/wsdl/{downloaded wsdl file}</wsdlFile>
<packageName>com.cybersource.stub</packageName>
<databindingName>xmlbeans</databindingName>
</configuration>
</execution>
</executions>
</plugin>
接下来,您需要将生成的 jar 文件安装到 maven 存储库中。在你做任何事情之前,你需要去生成存根代码的地方并运行“ant”,它将生成所需的 jar 文件,你需要将它们安装到你的 repo 中。
如果您使用的是 Spring Boot,请添加以下两个 bean:
@Bean
public ConfigurationContext getConfigurationContext() throws AxisFault {
ConfigurationContext ctx = ConfigurationContextFactory
.createConfigurationContextFromFileSystem(config.getAxisConfigLocation(), null);
return ctx;
}
@Bean
public Policy getOMElement() throws FileNotFoundException {
String policyLocation = config.getAxisConfigLocation() + "/conf/policy.xml";
InputStream in = new FileInputStream(policyLocation);
OMXMLParserWrapper omxmlParserWrapper = OMXMLBuilderFactory.createOMBuilder(in);
Policy policy = PolicyEngine.getPolicy(omxmlParserWrapper.getDocumentElement());
return policy;
}
您应该将 config.getAxisConfigLocation() 设置到您复制 Axis 配置文件的位置,如下所示:
在上述模式中,axis2.xml 对生成axis2 上下文很重要。policy.xml 和rampart-xxx.mar 文件用于身份验证,您需要知道服务器如何处理它。
在您的连接器部分,您需要注入 ctx 和/或策略 bean 并生成存根,如下所示:
@Autowired
ConfigurationContext ctx;
@Autowired
Policy policy;
private TransactionProcessorStub generateStub() throws AxisFault {
TransactionProcessorStub stub = new TransactionProcessorStub(ctx, config.getServerurl());
ServiceClient client = stub._getServiceClient();
Options clientOptions = client.getOptions();
clientOptions.setProperty(WSHandlerConstants.USER, config.getMerchantid());
clientOptions.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
client.setOptions(clientOptions);
client.engageModule("rampart");
return stub;
}
于 2017-11-24T05:14:03.137 回答