1

我有一个简单的Axis2客户。我Spring用作轻型容器。axis2我的问题是:客户端和之间是否有集成spring?我过去熟悉org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBeanSpring 中的课程,但不知道它是否有效axis2

4

1 回答 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 回答