本帖最后由 uncle_p 于 2011-08-04 16:48:54 编辑

解决方案 »

  1.   

    cxf   好吧 我承认我是新新新新新手
      

  2.   

    架包可以网上下
    web.xml配置
     <servlet>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>
    org.apache.axis.transport.http.AxisServlet
    </servlet-class>
    </servlet>

    <servlet>
    <servlet-name>AdminServlet</servlet-name>
    <servlet-class>
    org.apache.axis.transport.http.AdminServlet
    </servlet-class>
    <load-on-startup>100</load-on-startup>
    </servlet>

    <servlet>
    <servlet-name>SOAPMonitorService</servlet-name>
    <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
    <init-param>
    <param-name>SOAPMonitorPort</param-name>
    <param-value>5001</param-value>
    </init-param>
    <load-on-startup>100</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>*.jws</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    在WIN-INF下面创建server-config.wsdd这个文件名字是固定的不能改变
    里面的配置是
    <?xml version="1.0" encoding="UTF-8"?>
    <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"><globalConfiguration>
      <parameter name="sendMultiRefs" value="true"/>
      <parameter name="disablePrettyXML" value="true"/>
      
    <parameter name="adminPassword" value="admin"/>
      <parameter name="attachments.Directory" value="D:\Tomcat6.0\webapps\zyservice\WEB-INF\attachments"/>
      <parameter name="dotNetSoapEncFix" value="true"/>
      <parameter name="enableNamespacePrefixOptimization" value="false"/>
      <parameter name="sendXMLDeclaration" value="true"/>
      <parameter name="sendXsiTypes" value="true"/>
      <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
      <requestFlow>
       <handler type="java:org.apache.axis.handlers.JWSHandler">
        <parameter name="scope" value="session"/>
       </handler>
       <handler type="java:org.apache.axis.handlers.JWSHandler">
        <parameter name="scope" value="request"/>
        <parameter name="extension" value=".jwr"/>
       </handler>
      </requestFlow>
     </globalConfiguration>
     <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
     <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
     <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
      <service name="AdminService" provider="java:MSG">
      <parameter name="allowedMethods" value="AdminService"/>
      <parameter name="enableRemoteAdmin" value="false"/>
      <parameter name="className" value="org.apache.axis.utils.Admin"/>
      <namespace>http://xml.apache.org/axis/wsdd/</namespace>
     </service>
     <service name="Version" provider="java:RPC">
      <parameter name="allowedMethods" value="getVersion"/>
      <parameter name="className" value="org.apache.axis.Version"/>
     </service>
    <service name="CallListent" provider="java:RPC">
    <parameter name="className" value="com.zy.callcenter.call.CallListent"/>
    <parameter name="allowedMethods" value="*"/>
    </service>
     <transport name="http">
      <requestFlow>
       <handler type="URLMapper"/>
       <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
      </requestFlow>
      <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
      <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
      <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
      <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
      <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
      <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
     </transport>
     <transport name="local">
      <responseFlow>
       <handler type="LocalResponder"/>
      </responseFlow>
     </transport>
    </deployment>
    里面真正用到的是
    <service name="CallListent" provider="java:RPC">
    <parameter name="className" value="com.zy.callcenter.call.CallListent"/>
    <parameter name="allowedMethods" value="*"/>
    </service>
    第一个value里面是你指向调用的类  第二个是你类里面指向的方法 *为所有方法
    ----------------------------------------------------------------以上是搭建服务器端
    接收端给个简单方法
    public static void main(String[] args) {
    // TODO 自动生成方法存根
    String endpoint = "http://192.168.1.113:8080/financecallcenter/services/CallListent";//服务器地址
    Service service =new Service();
    Call call;
    try{
    call=(Call)service.createCall();
    call.setTargetEndpointAddress(new java.net.URL(endpoint));
    call.setOperationName("getrecord");//方法
    // String value="hhsjhs";
    System.out.println(call.invoke(new Object[]{"2011-08-04"}));//具体参数
    //返回值1
    /**
     * <results><result>10001</result><info>密码重置失败!</info></results>
     */
    }catch (ServiceException e) {
    e.printStackTrace();
    } catch (MalformedURLException e) {
    e.printStackTrace();
    } catch (RemoteException e) { 
    e.printStackTrace();
    }
    }
      

  3.   

    我的意思是说用axis开发的服务端,测试用axis的客户端没有问题。但是现在需求是要cxf开发客户端,调用服务端的方法可以调用,但是返回的都是null。
    网上看了下,有人说是  你的wsdl 是rpc-encoded , CXF不支持这种编码方式。    应该说的是wsdd配置里的 <service name="CallListent" provider="java:RPC">  现在就是想请教有没有什么方法解决~~谢谢2楼的哥~~  你的回复真的很详细  太感谢了
      

  4.   

    用cxf的客户端应该是有办法调用 axis  服务端的吧?
      

  5.   

    如果用cxf做客服端,服务器端需要继承类,不需要配置,
    客户端操作可以如下
    CXF框架提供了调用WebService的客户端API,使用起来也比较方便。下面是CXF客户端的写法:
            ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
            factory.setServiceClass(IWebService.class);
            factory.setAddress(
    "http://localhost:8080/vo/services/SampleWebService");
            IWebService client = (IWebService)factory.create();
            System.out.println("Invoke execute()....");
            System.out.println(client.execute("Hello World"));
      

  6.   

    这个客户端我也是这么写的     可以调用服务端   但是不知道为什么就是接收不到服务端返回的数据 总是null
      

  7.   


    那IWebService这个类是哪里来的?
      

  8.   

    兄弟,cxf调axis,接收到的返回值是null的问题解决没?
    我也碰到这个问题了,郁闷。