-1

我创建了一个名为“testUpdate”的动态 Web 项目(当然我不会忘记将动态 Web 模块版本更改为 2.5,并且在配置中我选择了 Axis 2 Web 服务

  1. 我将这两个类添加到我的动态网络项目中:

SimpleService .java 和 PWCBHandler.java

  1. 我右键单击 SimpleService.java -> 新建 -> 其他 -> Web 服务来创建我的 Web 服务

  2. 我不会忘记将所有 jar 文件从壁垒分布复制到 testUpdate/WebContent/WEB_INF/lib 和所有 .mar 模块到 testUpdate/WebContent/WEB_INF/modules

  3. 我更改了 services.xml 文件,所以它看起来像

    <service name="SimpleService" >
    <module ref="rampart" />
    <Description>
    
    </Description>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass" locked="false">com.gismo.SimpleService</parameter>
        <parameter name="InflowSecurity">
        <action>
            <items>UsernameToken</items>
            <passwordCallbackClass>com.gismo.PWCBHandler</passwordCallbackClass>
        </action>
    </parameter>
    </service>
    
  4. 我右键单击 testUpdate -> RUN AS _> 在服务器上运行(并且我的 Web 服务部署成功)

  5. 文件 -> 新建 -> 其他 -> Web 服务客户端

并在服务定义中粘贴 SimpleService 的 wsdl 文件的 url

( http://localhost:9091/testUpdate/services/SimpleService?wsdl)

  1. 我将 testcl.java 类添加到我的 Web 服务客户端。这是代码

    public class testCL {
    
    public static void main(String[] args) throws Exception {
    
    if (args.length != 2) {
    
        System.out.println(args.length);
        System.out
                .println("Usage: $java Client endpoint_address client_repo_path");
    }
    
    ConfigurationContext ctx = ConfigurationContextFactory
            .createConfigurationContextFromFileSystem(args[1], args[1]
                    + "/conf/axis2.xml");
    
    ServiceClient client = new ServiceClient(ctx, null);
    Options options = new Options();
    options.setAction("urn:echo");
    options.setTo(new EndpointReference(args[0]));
    client.setOptions(options);
    
    OMElement response = client.sendReceive(getPayload("Hello world"));
    
    System.out.println(response);
    }
    
      private static OMElement getPayload(String value) {
     OMFactory factory = OMAbstractFactory.getOMFactory();
     OMNamespace ns = factory.createOMNamespace("com.gismo/xsd", "ns1");
     OMElement elem = factory.createOMElement("echo", ns);
     OMElement childElem = factory.createOMElement("param0", null);
     childElem.setText(value);
     elem.addChild(childElem);
     return elem;
    }
    }
    
  2. 我不要忘记更改 webSercice_client/WebContent/axis2-web/conf/axis2.xml 并添加

     <module ref="rampart"/>
     <parameter name="OutflowSecurity">
      <action>
        <items>UsernameToken</items>
        <user>bob</user>
         <passwordCallbackClass>com.gismo.PWCBHandler</passwordCallbackClass>
      </action>
     </parameter>
    
  3. 但是当我将 testCl 作为 Java Application 运行时,它给了我一个异常

    用法:$java Client endpoint_address client_repo_path 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 1 at com.gismo.testcl.main(testcl.java:24)

4

1 回答 1

1

我的通灵调试能力告诉我,您运行它时没有提供两个命令行参数。您可以在程序输出中看到错误消息“Usage: $java Client endpoint_address client_repo_path”,这意味着您没有提供两个命令行参数,因此args[1]可能无效。您的程序在检查命令行参数的数量后不会退出,因此它会args[1]在抱怨程序运行不正确后尝试访问。

if (args.length != 2) {

    System.out.println(args.length);
    System.out
            .println("Usage: $java Client endpoint_address client_repo_path");
}

ConfigurationContext ctx = ConfigurationContextFactory
        .createConfigurationContextFromFileSystem(args[1], args[1]
                + "/conf/axis2.xml");
于 2013-04-08T22:17:51.017 回答