【问题标题】:ClassNotFoundException in reading Axis2 config file读取 Axis2 配置文件时出现 ClassNotFoundException
【发布时间】:2017-09-18 08:05:34
【问题描述】:

我正在尝试使用 Axis2 建立 Web 服务客户端连接。要设置 UserameToken,我必须使用 PasswordCallBack。

这是我的客户端代码:

ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("src/main/resources/axis", "src/main/resources/axis/conf/axis2.xml");

            TransactionProcessorStub stub = new TransactionProcessorStub(ctx, SERVER_URL);
            ServiceClient client = stub._getServiceClient();
            Options clientOptions = client.getOptions();
            clientOptions.setProperty(WSHandlerConstants.USER, request.getMerchantID());

这是我的 conf 结构:

在axis2.xml中,我使用来自javaranch的样本设置我的密码回调

这是一段sn-p代码:

<phaseOrder type="InFlow">
        <!--  System pre-defined phases       -->
         <phase name="Transport">
            <handler name="RequestURIBasedDispatcher"
                     class="org.apache.axis2.engine.RequestURIBasedDispatcher">
                <order phase="Transport"/>
            </handler>
            <handler name="SOAPActionBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPActionBasedDispatcher">
                <order phase="Transport"/>
            </handler>
        </phase>
        <phase name="Security"/>
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
            <handler name="AddressingBasedDispatcher"
                     class="org.apache.axis2.engine.AddressingBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="SOAPMessageBodyBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>
            <handler name="InstanceDispatcher"
                     class="org.apache.axis2.engine.InstanceDispatcher">
                <order phase="Dispatch"/>
            </handler>
        </phase>
        <!--  System pre defined phases       -->
        <!--   After Postdispatch phase module author or or service author can add any phase he want      -->
        <phase name="OperationInPhase"/>
    </phaseOrder>

我正在使用 Maven 生成客户端代码,并且一切顺利。

问题是当应用程序尝试在此行中创建 ConfigurationContext 时:

ConfigurationContextFactory.createConfigurationContextFromFileSystem("src/main/resources/axis", "src/main/resources/axis/conf/axis2.xml");

我得到 ClassNotFoundException 如下:

org.apache.axis2.deployment.DeploymentException: org.apache.axis2.engine.RequestURIBasedDispatcher 在 org.apache.axis2.deployment.util.Utils.loadHandler(Utils.java:147) 在 org.apache.axis2.deployment.AxisConfigBuilder.processPhaseList(AxisConfigBuilder.java:575) 在 org.apache.axis2.deployment.AxisConfigBuilder.processPhaseOrders(AxisConfigBuilder.java:606) 在 org.apache.axis2.deployment.AxisConfigBuilder.populateConfig(AxisConfigBuilder.java:149) 在 org.apache.axis2.deployment.DeploymentEngine.populateAxisConfiguration(DeploymentEngine.java:629) 在 org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration(FileSystemConfigurator.java:116) 在 org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:64) 在 org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromFileSystem(ConfigurationContextFactory.java:210) 在 au.com.jaycar.gateway.cybersourceClient.Sample.main(Sample.java:96) 引起:java.lang.ClassNotFoundException: org.apache.axis2.engine.RequestURIBasedDispatcher 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 java.lang.Class.forName0(本机方法)在 java.lang.Class.forName(Class.java:264) 在 org.apache.axis2.util.Loader.loadClass(Loader.java:261) 在 org.apache.axis2.util.Loader.loadClass(Loader.java:229) 在 org.apache.axis2.deployment.util.Utils.loadHandler(Utils.java:114) ... 8 更多

我不确定这是因为缺少库或配置。因为我确定它在我的 maven 依赖项中的axis2-kernel 中,否则不会编译源代码。

我的配置或类路径有什么问题吗?

【问题讨论】:

    标签: axis2 rampart


    【解决方案1】:

    我可以解决这个问题。我不需要加载axis2.xml 和服务器模块。我删除了它们,并使用了来自壁垒示例的第一个示例代码中的 policy.xml 并将其加载到客户端选项中:

    ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("src/main/resources/axis", 空值); TransactionProcessorStub 存根 = 新 TransactionProcessorStub(ctx, SERVER_URL); ServiceClient 客户端 = stub._getServiceClient();选项 clientOptions = client.getOptions(); clientOptions.setProperty(WSHandlerConstants.USER, request.getMerchantID()); StAXOMBuilder 构建器 = 新 StAXOMBuilder("src/main/resources/axis/conf/policy.xml");政策 政策 = PolicyEngine.getPolicy(builder.getDocumentElement()); clientOptions.setProperty(RampartMessageData.KEY_RAMPART_POLICY, 政策); client.setOptions(clientOptions); client.engageModule("壁垒"); stub._setServiceClient(client); ReplyMessageDocument response = stub.runTransaction(document);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-17
      • 2018-11-29
      • 2018-05-20
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 2015-01-19
      相关资源
      最近更新 更多