webService几点个人总结

1、xfire中\org\codehaus\xfire\jaxws下类与jdk jar包冲突
删除掉jaxws
2、xfire的静态调用改cxf,要改成cxf的动态调用(否则不通)

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
//注册WebService接口    
factory.setServiceClass(HrmService.class);    
//设置WebService地址    
 factory.setAddress("http://10.5.104.37:88//services/HrmService");
 HrmService hsi = (HrmService)factory.create();
 s = hsi.SynHrmResource(ip,orgxml);
System.out.println(s);

/*以上代码替换成 =======================================================
*/
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://10.5.104.37:88//services/HrmService?wsdl");
Object[] objects = client.invoke("SynHrmResource", new Object[]{ip,orgxml});
System.out.println("Echo response: "+ objects[0]);

3、axis客服端传对象参数,服务器端要定义支持

package cn.com.chenlly.ssh.webservice.axis;

import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
public class WSTestServiceClient {
 public static void main(String[] args) {
  Service service = new Service();
  try {
   Call call = (Call) service.createCall();
   String url = "http://192.168.1.98:8082/SSHProject/services/ws?wsdl";
   call.setTargetEndpointAddress(new java.net.URL(url));
                        //定义对象
   Address address = new Address();
   address.setIdentifier(1);
   address.setProvince("湖南");
   address.setCity("长沙");
   address.setExst(false);

	//第一个参数名字空间URI,第二个参数本地部分,注意这两部分在server-config.wsdd文件中标签beanMapping配置  urn:AddressManager 是服务器端定义的
   QName qn = new QName("urn:AddressManager", "Address");
   call.registerTypeMapping(Address.class, qn,
     new BeanSerializerFactory(Address.class, qn),//序列化
     new BeanDeserializerFactory(Address.class, qn));
   
   call.setOperationName(new QName(url,"dealAddress"));
   
   call.addParameter("arg0", qn, ParameterMode.IN);//定义一个参数类型,如果是String类型的参数可以不需要这句话
   call.setReturnClass(Address.class);//指定返回类型
   
   Address result = (Address) call.invoke(new Object[]{address});//这里传递给service的是一个对象
   System.out.println(result.isExst());
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 /**
 org.apache.axis.client.Service service = new Service();
//生成客户端
org.apache.axis.client.Call call = (Call)service.createCall();
//设置url(注意需要生成一个net 包下的URL对象而不是字符串
call .setTargetEndpointAddress(new URL(url字符串));
//设置是否使用SoapAction
call .setUseSOAPAction(true);
//设置SoapAction路径一般我发布服务类的的全路径名倒叙加上发布的方法
call.setSOAPActionURI(targetNamespace+method);
//设置targetNamespace  和 method;
call.setOperationName(targetNamespace  ,method);
//设置请求参数(根据服务端需要的参数设置例如需要一个参数名为Name的String类型)IN为输入 out 为输出 INOUT为输入输出
call.addParameter(new QName(targetNamespace, "Name"), 
org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
//设置返回数据类型(SOAP_VECTOR为数组具体类型自行百度)
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_VECTOR);
//调用webService获得返回的数据 转入一个Object[]数组,数组的元素就是转入参数的值
Object invoke = createCall.invoke(new Object[]{"harry"});
 */
}

4、cxf客服端调用方法

//1、静态调用	
// 创建WebService客户端代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
// 判断是否抛出异常
factory.getOutInterceptors().add(new LoggingInInterceptor());
// 注册webservice接口 DeductionService类头上要加@webservice
factory.setServiceClass(DeductionService.class);
// 配置webservice地址
factory.setAddress("http://localhost:7002/card/services/HelloWorld?wsdl");
// 获得接口对象
CxfService service = (CxfService) factory.create();
// 调用接口方法
String result = service.sayHello("aaaaaaaaaa");
System.out.println("调用结果:" + result);
// 关闭接口连接
System.exit(0);


//2、动态调用
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
// url为调用webService的wsdl地址
    org.apache.cxf.endpoint.Client client = dcf
        .createClient("http://localhost:7002/card/services/HelloWorld?wsdl");
    // namespace是命名空间,methodName是方法名
    QName name = new QName("http://dao.xcf.digitalchina.com/", "sayHello");
    
	// paramvalue为参数值
    String xmlStr = "aaaaaaaa";
    
    Object[] objects;
    try {
      objects = client.invoke(name, xmlStr);
      System.out.println(objects[0].toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
	
	
/*静态调用需要依赖service类,因为客户端调用cxf webservice接口的过程中需要服务器端提供service,很不方便,
如果同一个项目中则没有区别。

动态调用完全不依赖service类,服务器端只要提供接口名和路径就可以方便的调用。*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值