CXF在项目中的真实运用--WS访问客户端编写[java、.net]
一、首先,CXF的WS实现类由于实现了和Spring的无缝集成,因此可以采用Spring的单元测试来测试基本功能。
代码如下:
package com.defshare.sy.test.biz;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Arrays;import java.util.UUID;import javax.annotation.Resource;import org.apache.commons.io.IOUtils;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.junit.Test;import com.defshare.sy.ws.ISYWebService;import com.defshare.sy.ws.po.Clinique;import com.defshare.sy.ws.po.WorkList;import com.defshare.sy.ws.po.WorkListPicFile;public class SyWebServiceTest extends SpringTestTemplate{@Testpublic void testUploadWorkListPicFile(){//JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();//proxy.setAddress("http://localhost:8090/sy/services/SYWebService");//proxy.setServiceClass(ISYWebService.class);//ISYWebService clientProxy = (ISYWebService)proxy.create();//clientProxy.upLoadWorkListPic("", "",null);WorkListPicFile file = new WorkListPicFile();String serverFile = UUID.randomUUID().toString()+".DBF"; InputStream is = null; try { is = new FileInputStream("d:/QUESCTION.DBF"); file.setFileSize(is.available()); byte[] bytes = new byte[1024 * 1024]; int size=0; do{ size = is.read(bytes); if (size <= 0) { break; } byte[] fixedBytes = Arrays.copyOfRange(bytes, 0, size); file.setBytes(fixedBytes); file.setServerFile(serverFile); file.setWorkListId("WL0001"); int resp = syWebService.upLoadWorkListPic("WS访问账户","WS访问密码", file); System.out.println(resp==0?"本次上传文件块成功":"本次上传文件块异常"); if (resp!=0) break; file.setPosition(file.getPosition() + fixedBytes.length); }while(size>0); } catch(IOException e) { e.printStackTrace(); } finally { if (is!=null)try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} IOUtils.closeQuietly(is); } }@Testpublic void testremoveWorkList(){////正常输入数据1期望结果:成功实际结果:syWebService.removeWorkList("WS访问账户", "WS访问密码", "q");}@Testpublic void testUpdateWorkList(){WorkList wl = new WorkList();wl.setGdbh("WL0001");wl.setFggdbh("hehe-------");syWebService.updateWorkList("WS访问账户", "WS访问密码", wl);}@Testpublic void updateClinique(){Clinique c = new Clinique();c.setZsid("CL0001");c.setDq("金牛区-------");System.out.println("*******"+syWebService.updateClinique("WS访问账户", "WS访问密码", c));}@Resource(name="syWebService")private ISYWebService syWebService;@Resource(name="syWebService")public void setSyWebService(ISYWebService syWebService) {this.syWebService = syWebService;}}
二、待单元测试通过后在进行WebService调用测试,这需要发布这个WebService到服务器上:
我的这个WS发布后的WSDL如下:
http://192.168.1.89:92/services/SYWebService?wsdl
<?xml version="1.0" encoding="UTF-8" ?> - <wsdl:definitions name="SYWebService" targetNamespace="http://www.springframework.org/schema/beans" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.springframework.org/schema/beans" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">- <wsdl:types>- <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://www.springframework.org/schema/beans" xmlns:tns="http://www.springframework.org/schema/beans" xmlns:xs="http://www.w3.org/2001/XMLSchema">- <xs:complexType name="WorkListPicFile">- <xs:sequence> <xs:element minOccurs="0" name="workListId" type="xs:string" /> <xs:element minOccurs="0" name="serverFile" type="xs:string" /> <xs:element name="position" type="xs:long" /> <xs:element name="fileSize" type="xs:long" /> <xs:element minOccurs="0" name="bytes" type="xs:base64Binary" /> </xs:sequence> </xs:complexType>- <xs:complexType name="WorkList">- <xs:sequence> <xs:element minOccurs="0" name="gdbh" type="xs:string" /> <xs:element minOccurs="0" name="fggdbh" type="xs:string" /> <xs:element minOccurs="0" name="zsid" type="xs:string" /> <xs:element minOccurs="0" name="ysxm" type="xs:string" /> <xs:element minOccurs="0" name="brxm" type="xs:string" /> <xs:element minOccurs="0" name="ywy" type="xs:string" /> <xs:element minOccurs="0" name="ssdq" type="xs:string" /> <xs:element minOccurs="0" name="fgyy" type="xs:string" /> <xs:element minOccurs="0" name="jjrq" type="xs:string" /> <xs:element minOccurs="0" name="cjrq" type="xs:string" /> <xs:element minOccurs="0" name="jzrq" type="xs:string" /> <xs:element minOccurs="0" name="xgrq" type="xs:string" /> <xs:element minOccurs="0" name="xgcs" type="xs:string" /> <xs:element minOccurs="0" name="luz" type="xs:string" /> <xs:element minOccurs="0" name="cjr" type="xs:string" /> <xs:element minOccurs="0" name="pics" type="xs:string" /> <xs:element maxOccurs="unbounded" minOccurs="0" name="toothSpecs" nillable="true" type="tns:ToothSpec" /> </xs:sequence> </xs:complexType>- <xs:complexType name="ToothSpec">- <xs:sequence> <xs:element minOccurs="0" name="toothSpecId" type="xs:string" /> <xs:element minOccurs="0" name="gdbh" type="xs:string" /> <xs:element minOccurs="0" name="yclx" type="xs:string" /> <xs:element minOccurs="0" name="zl" type="xs:string" /> <xs:element minOccurs="0" name="ys" type="xs:string" /> <xs:element minOccurs="0" name="yw" type="xs:string" /> <xs:element minOccurs="0" name="dx" type="xs:string" /> <xs:element minOccurs="0" name="sl" type="xs:int" /> <xs:element minOccurs="0" name="addsl" type="xs:int" /> <xs:element minOccurs="0" name="jg" type="xs:int" /> <xs:element minOccurs="0" name="hbhid" type="xs:string" /> <xs:element minOccurs="0" name="gx" type="xs:string" /> </xs:sequence> </xs:complexType>- <xs:complexType name="Clinique">- <xs:sequence> <xs:element minOccurs="0" name="zsid" type="xs:string" /> <xs:element minOccurs="0" name="zsmm" type="xs:string" /> <xs:element minOccurs="0" name="dxts" type="xs:int" /> <xs:element minOccurs="0" name="zsmc" type="xs:string" /> <xs:element minOccurs="0" name="ysxm" type="xs:string" /> <xs:element minOccurs="0" name="lxdh" type="xs:string" /> <xs:element minOccurs="0" name="zsjx" type="xs:string" /> <xs:element minOccurs="0" name="zsdz" type="xs:string" /> <xs:element minOccurs="0" name="dq" type="xs:string" /> <xs:element minOccurs="0" name="dqbh" type="xs:string" /> <xs:element minOccurs="0" name="ywy" type="xs:string" /> <xs:element minOccurs="0" name="ywjl" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:element name="removeWorkList" type="tns:removeWorkList" /> - <xs:complexType name="removeWorkList">- <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> <xs:element minOccurs="0" name="arg1" type="xs:string" /> <xs:element minOccurs="0" name="arg2" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:element name="removeWorkListResponse" type="tns:removeWorkListResponse" /> - <xs:complexType name="removeWorkListResponse">- <xs:sequence> <xs:element name="return" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:element name="upLoadWorkListPic" type="tns:upLoadWorkListPic" /> - <xs:complexType name="upLoadWorkListPic">- <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> <xs:element minOccurs="0" name="arg1" type="xs:string" /> <xs:element minOccurs="0" name="arg2" type="tns:WorkListPicFile" /> </xs:sequence> </xs:complexType> <xs:element name="upLoadWorkListPicResponse" type="tns:upLoadWorkListPicResponse" /> - <xs:complexType name="upLoadWorkListPicResponse">- <xs:sequence> <xs:element name="return" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:element name="updateWorkList" type="tns:updateWorkList" /> - <xs:complexType name="updateWorkList">- <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> <xs:element minOccurs="0" name="arg1" type="xs:string" /> <xs:element minOccurs="0" name="arg2" type="tns:WorkList" /> </xs:sequence> </xs:complexType> <xs:element name="updateWorkListResponse" type="tns:updateWorkListResponse" /> - <xs:complexType name="updateWorkListResponse">- <xs:sequence> <xs:element name="return" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:element name="updateToothSpecGX" type="tns:updateToothSpecGX" /> - <xs:complexType name="updateToothSpecGX">- <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> <xs:element minOccurs="0" name="arg1" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:element name="updateToothSpecGXResponse" type="tns:updateToothSpecGXResponse" /> - <xs:complexType name="updateToothSpecGXResponse">- <xs:sequence> <xs:element name="return" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:element name="upLoadWorkList" type="tns:upLoadWorkList" /> - <xs:complexType name="upLoadWorkList">- <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> <xs:element minOccurs="0" name="arg1" type="xs:string" /> <xs:element maxOccurs="unbounded" minOccurs="0" name="arg2" type="tns:WorkList" /> </xs:sequence> </xs:complexType> <xs:element name="upLoadWorkListResponse" type="tns:upLoadWorkListResponse" /> - <xs:complexType name="upLoadWorkListResponse">- <xs:sequence> <xs:element name="return" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:element name="updateClinique" type="tns:updateClinique" /> - <xs:complexType name="updateClinique">- <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> <xs:element minOccurs="0" name="arg1" type="xs:string" /> <xs:element minOccurs="0" name="arg2" type="tns:Clinique" /> </xs:sequence> </xs:complexType> <xs:element name="updateCliniqueResponse" type="tns:updateCliniqueResponse" /> - <xs:complexType name="updateCliniqueResponse">- <xs:sequence> <xs:element name="return" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:element name="upLoadClinique" type="tns:upLoadClinique" /> - <xs:complexType name="upLoadClinique">- <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> <xs:element minOccurs="0" name="arg1" type="xs:string" /> <xs:element maxOccurs="unbounded" minOccurs="0" name="arg2" type="tns:Clinique" /> </xs:sequence> </xs:complexType> <xs:element name="upLoadCliniqueResponse" type="tns:upLoadCliniqueResponse" /> - <xs:complexType name="upLoadCliniqueResponse">- <xs:sequence> <xs:element name="return" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types>- <wsdl:message name="upLoadWorkListPicResponse"> <wsdl:part element="tns:upLoadWorkListPicResponse" name="parameters" /> </wsdl:message>- <wsdl:message name="updateClinique"> <wsdl:part element="tns:updateClinique" name="parameters" /> </wsdl:message>- <wsdl:message name="upLoadWorkList"> <wsdl:part element="tns:upLoadWorkList" name="parameters" /> </wsdl:message>- <wsdl:message name="upLoadCliniqueResponse"> <wsdl:part element="tns:upLoadCliniqueResponse" name="parameters" /> </wsdl:message>- <wsdl:message name="updateWorkListResponse"> <wsdl:part element="tns:updateWorkListResponse" name="parameters" /> </wsdl:message>- <wsdl:message name="updateWorkList"> <wsdl:part element="tns:updateWorkList" name="parameters" /> </wsdl:message>- <wsdl:message name="removeWorkListResponse"> <wsdl:part element="tns:removeWorkListResponse" name="parameters" /> </wsdl:message>- <wsdl:message name="upLoadClinique"> <wsdl:part element="tns:upLoadClinique" name="parameters" /> </wsdl:message>- <wsdl:message name="upLoadWorkListResponse"> <wsdl:part element="tns:upLoadWorkListResponse" name="parameters" /> </wsdl:message>- <wsdl:message name="upLoadWorkListPic"> <wsdl:part element="tns:upLoadWorkListPic" name="parameters" /> </wsdl:message>- <wsdl:message name="updateToothSpecGX"> <wsdl:part element="tns:updateToothSpecGX" name="parameters" /> </wsdl:message>- <wsdl:message name="updateToothSpecGXResponse"> <wsdl:part element="tns:updateToothSpecGXResponse" name="parameters" /> </wsdl:message>- <wsdl:message name="removeWorkList"> <wsdl:part element="tns:removeWorkList" name="parameters" /> </wsdl:message>- <wsdl:message name="updateCliniqueResponse"> <wsdl:part element="tns:updateCliniqueResponse" name="parameters" /> </wsdl:message>- <wsdl:portType name="ISYWebService">- <wsdl:operation name="removeWorkList"> <wsdl:input message="tns:removeWorkList" name="removeWorkList" /> <wsdl:output message="tns:removeWorkListResponse" name="removeWorkListResponse" /> </wsdl:operation>- <wsdl:operation name="upLoadWorkListPic"> <wsdl:input message="tns:upLoadWorkListPic" name="upLoadWorkListPic" /> <wsdl:output message="tns:upLoadWorkListPicResponse" name="upLoadWorkListPicResponse" /> </wsdl:operation>- <wsdl:operation name="updateWorkList"> <wsdl:input message="tns:updateWorkList" name="updateWorkList" /> <wsdl:output message="tns:updateWorkListResponse" name="updateWorkListResponse" /> </wsdl:operation>- <wsdl:operation name="updateToothSpecGX"> <wsdl:input message="tns:updateToothSpecGX" name="updateToothSpecGX" /> <wsdl:output message="tns:updateToothSpecGXResponse" name="updateToothSpecGXResponse" /> </wsdl:operation>- <wsdl:operation name="upLoadWorkList"> <wsdl:input message="tns:upLoadWorkList" name="upLoadWorkList" /> <wsdl:output message="tns:upLoadWorkListResponse" name="upLoadWorkListResponse" /> </wsdl:operation>- <wsdl:operation name="updateClinique"> <wsdl:input message="tns:updateClinique" name="updateClinique" /> <wsdl:output message="tns:updateCliniqueResponse" name="updateCliniqueResponse" /> </wsdl:operation>- <wsdl:operation name="upLoadClinique"> <wsdl:input message="tns:upLoadClinique" name="upLoadClinique" /> <wsdl:output message="tns:upLoadCliniqueResponse" name="upLoadCliniqueResponse" /> </wsdl:operation> </wsdl:portType>- <wsdl:binding name="SYWebServiceSoapBinding" type="tns:ISYWebService"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> - <wsdl:operation name="removeWorkList"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="removeWorkList"> <soap:body use="literal" /> </wsdl:input>- <wsdl:output name="removeWorkListResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation>- <wsdl:operation name="upLoadWorkListPic"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="upLoadWorkListPic"> <soap:body use="literal" /> </wsdl:input>- <wsdl:output name="upLoadWorkListPicResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation>- <wsdl:operation name="updateWorkList"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="updateWorkList"> <soap:body use="literal" /> </wsdl:input>- <wsdl:output name="updateWorkListResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation>- <wsdl:operation name="upLoadWorkList"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="upLoadWorkList"> <soap:body use="literal" /> </wsdl:input>- <wsdl:output name="upLoadWorkListResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation>- <wsdl:operation name="updateToothSpecGX"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="updateToothSpecGX"> <soap:body use="literal" /> </wsdl:input>- <wsdl:output name="updateToothSpecGXResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation>- <wsdl:operation name="updateClinique"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="updateClinique"> <soap:body use="literal" /> </wsdl:input>- <wsdl:output name="updateCliniqueResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation>- <wsdl:operation name="upLoadClinique"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="upLoadClinique"> <soap:body use="literal" /> </wsdl:input>- <wsdl:output name="upLoadCliniqueResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding>- <wsdl:service name="SYWebService">- <wsdl:port binding="tns:SYWebServiceSoapBinding" name="SYWebService"> <soap:address location="http://192.168.1.89:92/services/SYWebService" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
Java的测试客户端如下:
package com.defshare.sy.test.ws;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.sql.Timestamp;import java.util.Arrays;import java.util.UUID;import org.apache.commons.io.IOUtils;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.junit.Test;import com.defshare.sy.po.ToothSpec;import com.defshare.sy.ws.ISYWebService;import com.defshare.sy.ws.po.Clinique;import com.defshare.sy.ws.po.WorkList;import com.defshare.sy.ws.po.WorkListPicFile;public class syWebServiceClientTest { /** * 图片上传测试 */@Testpublic void testUpLoadWorkListPic() {JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();proxy.setAddress("http://localhost:8090/sy/services/SYWebService");proxy.setServiceClass(ISYWebService.class);ISYWebService clientProxy = (ISYWebService)proxy.create();WorkListPicFile file = new WorkListPicFile();String serverFile = UUID.randomUUID().toString()+".rar"; InputStream is = null; try { is = new FileInputStream("d:/webtemp.rar"); file.setFileSize(is.available()); file.setServerFile(serverFile); byte[] bytes = new byte[1024 * 1024]; int size=0; do{ size = is.read(bytes); if (size <= 0) { break; } byte[] fixedBytes = Arrays.copyOfRange(bytes, 0, size); file.setBytes(fixedBytes); file.setWorkListId("WL0001"); int resp = clientProxy.upLoadWorkListPic("WS访问账户","WS访问密码", file); System.out.println(resp==0?"本次上传文件块成功"+fixedBytes.length+"字节,已上传"+(file.getPosition()+fixedBytes.length)+"/"+file.getFileSize()+"字节":"本次上传文件块异常"); if (resp!=0) break; file.setPosition(file.getPosition() + fixedBytes.length); }while(size>0); } catch(IOException e) { e.printStackTrace(); } finally { if (is!=null)try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} IOUtils.closeQuietly(is); } }@Testpublic void testremoveWorkList(){JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();proxy.setAddress("http://localhost:8080/sy/services/SYWebService");proxy.setServiceClass(ISYWebService.class);ISYWebService clientProxy = (ISYWebService)proxy.create();clientProxy.removeWorkList("WS访问账户", "WS访问密码", "sdfghj");}@Testpublic void testUpdateWorkList(){JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();proxy.setAddress("http://localhost:8080/sy/services/SYWebService");proxy.setServiceClass(ISYWebService.class);ISYWebService clientProxy = (ISYWebService)proxy.create();WorkList ws = new WorkList();com.defshare.sy.ws.po.ToothSpec[] tt=new com.defshare.sy.ws.po.ToothSpec[2];com.defshare.sy.ws.po.ToothSpec t=new com.defshare.sy.ws.po.ToothSpec(); ws.setGdbh("WL0001"); ws.setZsid("CL0001"); ws.setYsxm("王医生"); ws.setBrxm("张发亏"); // ws.setJjrq("2012-09-12"); t.setToothSpecId("sx001"); t.setGdbh("WL0005"); t.setYclx("进口烤瓷牙1111"); t.setYw("A1-B6"); t.setYs("A2"); t.setSl(2); t.setAddsl(0); t.setDx("大"); t.setZl("smsm"); t.setGx("接单中"); tt[0]=t; com.defshare.sy.ws.po.ToothSpec ts=new com.defshare.sy.ws.po.ToothSpec(); ts.setGdbh("WL0001"); ts.setToothSpecId("sx002"); ts.setYclx("进口烤瓷牙22222"); ts.setYw("A1-B6"); ts.setYs("A2"); ts.setSl(2); ts.setAddsl(0); ts.setDx("大"); tt[1]=ts; ws.setToothSpecs(tt);System.out.println(clientProxy.updateWorkList("WS访问账户", "WS访问密码", ws));}@Testpublic void upLoadClinique(){JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();proxy.setAddress("http://localhost:8090/sy/services/SYWebService");proxy.setServiceClass(ISYWebService.class);ISYWebService clientProxy = (ISYWebService)proxy.create();Clinique[] cliniques = new Clinique[3];cliniques[0] = new Clinique();cliniques[0].setZsid("ZS004");cliniques[0].setDq("成都区");cliniques[0].setDqbh("1");cliniques[0].setDxts(10);cliniques[0].setLxdh("13699451030");cliniques[0].setYsxm("蒋医生");cliniques[0].setYwjl("黄经理");cliniques[0].setYwy("小明");cliniques[0].setZsdz("成都金牛区");cliniques[0].setZsjx("asdf");cliniques[0].setZsmc("中西医院");cliniques[0].setZsmm("123456");cliniques[1] = new Clinique();cliniques[1].setZsid("ZS005");cliniques[1].setDq("绵阳区");cliniques[1].setDqbh("2");cliniques[1].setDxts(15);cliniques[1].setLxdh("15015157972");cliniques[1].setYsxm("董医生");cliniques[1].setYwjl("胡经理");cliniques[1].setYwy("小强");cliniques[1].setZsdz("成都金牛区");cliniques[1].setZsjx("asdf");cliniques[1].setZsmc("中西医院");cliniques[1].setZsmm("123456");cliniques[2] = new Clinique();cliniques[2].setZsid("ZS006");cliniques[2].setDq("湖北区");cliniques[2].setDqbh("3");cliniques[2].setDxts(10);cliniques[2].setLxdh("13699451030");cliniques[2].setYsxm("顾医生");cliniques[2].setYwjl("赵经理");cliniques[2].setYwy("小黄");cliniques[2].setZsdz("成都金牛区");cliniques[2].setZsjx("asdf");cliniques[2].setZsmc("中西医院");cliniques[2].setZsmm("123456");clientProxy.upLoadClinique("WS访问账户", "WS访问密码", cliniques);}@Testpublic void upLoadWorkList(){JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();proxy.setAddress("http://localhost:8080/sy/services/SYWebService");proxy.setServiceClass(ISYWebService.class);ISYWebService clientProxy = (ISYWebService)proxy.create();WorkList[] workList = new WorkList[2];workList[0] = new WorkList();workList[0].setBrxm("小强哥");workList[0].setCjr("某某");workList[0].setCjrq("2012-12-12 13:10:00");workList[0].setFggdbh("001");workList[0].setFgyy("工单打回");workList[0].setGdbh("w9527");workList[0].setJjrq("2012-12-12 13:10:00");workList[0].setJzrq("2012-12-12 13:10:00");workList[0].setLuz("张山");workList[0].setPics("asdfsadf.jsp");workList[0].setSsdq("成都");workList[0].setXgcs("1");workList[0].setXgrq("2012-12-12 13:10:00");workList[0].setYsxm("蒋医生");workList[0].setYwy("李四");workList[0].setZsid("ZS003");workList[1] = new WorkList();workList[1].setBrxm("王哥");workList[1].setCjr("某某");workList[1].setCjrq("2012-12-12 13:10:00");workList[1].setFggdbh("002");workList[1].setFgyy("工单打回");workList[1].setGdbh("w9528");workList[1].setJjrq("2012-12-12 13:10:00");workList[1].setJzrq("2012-12-12 13:10:00");workList[1].setLuz("张山");workList[1].setPics("asdfsadf.jsp");workList[1].setSsdq("成都");workList[1].setXgcs("2");workList[1].setXgrq("2012-12-12 13:10:00");workList[1].setYsxm("蒋医生");workList[1].setYwy("李四");workList[1].setZsid("ZS003");com.defshare.sy.ws.po.ToothSpec[] tt=new com.defshare.sy.ws.po.ToothSpec[2];com.defshare.sy.ws.po.ToothSpec t=new com.defshare.sy.ws.po.ToothSpec(); // ws.setJjrq("2012-09-12"); t.setGdbh("WL0005"); t.setYclx("进口烤瓷牙"); t.setYw("A1-B6"); t.setYs("A2"); t.setSl(2); t.setAddsl(0); t.setDx("大"); tt[0]=t; com.defshare.sy.ws.po.ToothSpec ts=new com.defshare.sy.ws.po.ToothSpec(); ts.setGdbh("WL0001"); ts.setYclx("进口烤瓷牙"); ts.setYw("A1-B6"); ts.setYs("A2"); ts.setSl(2); ts.setAddsl(0); ts.setDx("大"); tt[1]=ts; workList[1].setToothSpecs(tt); int result = clientProxy.upLoadWorkList("WS访问账户", "WS访问密码", workList);System.out.println(result);}@Testpublic void updateToothSpecGX(){JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();proxy.setAddress("http://localhost:8080/sy/services/SYWebService");proxy.setServiceClass(ISYWebService.class);ISYWebService clientProxy = (ISYWebService)proxy.create();int result = clientProxy.updateToothSpecGX("sx001", "11111");System.out.println(result);}}
三、.NET测试客户端如下:
![CXF在项目中的真实使用-WS访问客户端编写[java、net]](http://img.reader8.net/uploadfile/jiaocheng/20140140/2756/201401271556173036.jpg)
![CXF在项目中的真实使用-WS访问客户端编写[java、net]](http://img.reader8.net/uploadfile/jiaocheng/20140140/2756/201401271556173037.jpg)
![CXF在项目中的真实使用-WS访问客户端编写[java、net]](http://img.reader8.net/uploadfile/jiaocheng/20140140/2756/201401271556173038.jpg)
![CXF在项目中的真实使用-WS访问客户端编写[java、net]](http://img.reader8.net/uploadfile/jiaocheng/20140140/2756/201401271556173039.jpg)
实现代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using SYWSClient.ServiceRef;using System.IO;namespace SYWSClient{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } /** * 上传诊所 **/ private void btnsyloadzs_Click(object sender, EventArgs e) { Clinique clinique = new Clinique(); if (this.txtzsid.Text == "") { MessageBox.Show("诊所编号不能为空....."); return; } if (this.txtzsmc.Text == "") { MessageBox.Show("诊所名称不能为空....."); return; } if (this.txtzsmm.Text == "") { MessageBox.Show("诊所密码不能为空....."); return; } if (this.txtysmc.Text == "") { MessageBox.Show("诊所医生不能为空....."); return; } //封装诊所的信息 clinique.zsid = this.txtzsid.Text; clinique.zsmm = this.txtzsmm.Text; clinique.zsmc = this.txtzsmc.Text; clinique.ysxm = this.txtysmc.Text; clinique.lxdh = this.txtlxdh.Text; clinique.zsjx = this.txtzsjx.Text; clinique.zsdz = this.txtzsdz.Text; clinique.dq = this.txtzsdq.Text; clinique.dqbh = this.txtdqbh.Text; clinique.ywy = this.txtywy.Text; clinique.ywjl = this.txtywjl.Text; //实例webserverce客户端 SYWebServiceClient client = new SYWebServiceClient(); int flag = client.upLoadClinique("WS访问访问账户", "WS访问密码", new Clinique[] { clinique }); switch (flag) { case 0: MessageBox.Show("上传诊所信息成功!"); break; case 1: MessageBox.Show("工单编号为空"); break; case 2: MessageBox.Show("诊所编号为空"); break; case 3: MessageBox.Show("没有文件信息上传"); break; case 4: MessageBox.Show("没有工单信息可以上传"); break; case 5: MessageBox.Show("没有工单图片文件可以上传"); break; case 6: MessageBox.Show("没有诊所信息可以上传"); break; case 7: MessageBox.Show("没有诊所信息可以上传"); break; case 8: MessageBox.Show("没有诊所信息可以更新"); break; case 9: MessageBox.Show("不安全的调用"); break; case 10: MessageBox.Show("不存在的工单[上传工单图片时检查]"); break; case 11: MessageBox.Show("输入输出异常"); break; case 12: MessageBox.Show("录入数据失败[存在重复数据]"); break; case 13: MessageBox.Show("应用程序异常"); break; case 14: MessageBox.Show("数据库异常"); break; } } private void btnsyupdatezs_Click(object sender, EventArgs e) { Clinique clinique = new Clinique(); if (this.txtzsid.Text == "") { MessageBox.Show("诊所编号不能为空....."); return; } if (this.txtzsmc.Text == "") { MessageBox.Show("诊所名称不能为空....."); return; } if (this.txtzsmm.Text == "") { MessageBox.Show("诊所密码不能为空....."); return; } if (this.txtysmc.Text == "") { MessageBox.Show("诊所医生不能为空....."); return; } //封装诊所的信息 clinique.zsid = this.txtzsid.Text; clinique.zsmm = this.txtzsmm.Text; clinique.zsmc = this.txtzsmc.Text; clinique.ysxm = this.txtysmc.Text; clinique.lxdh = this.txtlxdh.Text; clinique.zsjx = this.txtzsjx.Text; clinique.zsdz = this.txtzsdz.Text; clinique.dq = this.txtzsdq.Text; clinique.dqbh = this.txtdqbh.Text; clinique.ywy = this.txtywy.Text; clinique.ywjl = this.txtywjl.Text; ServiceRef.SYWebServiceClient c = new ServiceRef.SYWebServiceClient(); int flag = c.updateClinique("WS访问访问账户", "WS访问密码", clinique); switch (flag) { case 0: MessageBox.Show("修改诊所信息成功!"); break; case 1: MessageBox.Show("工单编号为空"); break; case 2: MessageBox.Show("诊所编号为空"); break; case 3: MessageBox.Show("没有文件信息上传"); break; case 4: MessageBox.Show("没有工单信息可以上传"); break; case 5: MessageBox.Show("没有工单图片文件可以上传"); break; case 6: MessageBox.Show("没有诊所信息可以上传"); break; case 7: MessageBox.Show("没有诊所信息可以上传"); break; case 8: MessageBox.Show("没有诊所信息可以更新"); break; case 9: MessageBox.Show("不安全的调用"); break; case 10: MessageBox.Show("不存在的工单[上传工单图片时检查]"); break; case 11: MessageBox.Show("输入输出异常"); break; case 12: MessageBox.Show("录入数据失败[存在重复数据]"); break; case 13: MessageBox.Show("应用程序异常"); break; case 14: MessageBox.Show("数据库异常"); break; } } /// <summary> /// 上传工单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUploadWorkList_Click(object sender, EventArgs e) { WorkList w = new WorkList(); if (txtgdbh.Text == "") { MessageBox.Show("工单编号不能为空"); return; } w.gdbh = txtgdbh.Text; if (txtfggdbh.Text == "") { MessageBox.Show("返工原单号不能为空!"); return; } w.fggdbh = txtfggdbh.Text; if (txtzsidwokelist.Text == "") { MessageBox.Show("诊所编号不能为空"); return; } w.zsid = txtzsidwokelist.Text; if (txtysxm.Text == "") { MessageBox.Show("医生姓名不能为空"); return; } w.ysxm = txtysxm.Text; if (txtbrxm.Text == "") { MessageBox.Show("病人姓名不能为空"); return; } w.brxm = txtbrxm.Text; if (textBox7.Text == "") { MessageBox.Show("业务员不能为空"); return; } w.ywy = textBox7.Text; if (txtssdq.Text == "") { MessageBox.Show("所属地区不能为空"); return; } w.ssdq = txtssdq.Text; if (txtfgyy.Text == "") { MessageBox.Show("返工原因不能为空"); } //格式化日期 w.jjrq = ftpjjrq.Value.ToString("yyyy-mm-dd hh:mm:ss"); w.cjrq = ftpcjrq.Value.ToString("yyyy-mm-dd hh:mm:ss"); w.jzrq = dtpjzrq.Value.ToString("yyyy-mm-dd hh:mm:ss"); w.xgrq = dtpxgrq.Value.ToString("yyyy-mm-dd hh:mm:ss"); if (txtluz.Text == "") { MessageBox.Show("录入人不能为空"); return; } w.luz = txtcjr.Text; ToothSpec ts = new ToothSpec(); if (txttoothSpecId.Text == "") { MessageBox.Show("规格编号不能为空"); return; } ts.toothSpecId = txttoothSpecId.Text; if (txtlx.Text == "") { MessageBox.Show("牙齿类型不能为空"); return; } ts.yclx = txtlx.Text; if (texzl.Text == "") { MessageBox.Show("牙齿总类不能为空"); return; } ts.zl = texzl.Text; if (txtys.Text == "") { MessageBox.Show("牙齿颜色不能为空"); return; } ts.ys = txtys.Text; if (txxjg.Text == "") { MessageBox.Show("JG不能为空"); return; } ts.jg = int.Parse(txxjg.Text); if (textyw.Text == "") { MessageBox.Show("牙位不能为空"); return; } ts.yw = textyw.Text; if (txtdx.Text == "") { MessageBox.Show("牙齿大小不能为空"); return; } ts.dx = txtdx.Text; if (textsl.Text == "") { MessageBox.Show("数量1不能为空"); return; } ts.sl = int.Parse(textsl.Text); if (textaddsl.Text == "") { MessageBox.Show("数量2不能为空"); return; } ts.addsl = int.Parse(textaddsl.Text); if (txthbhid.Text == "") { MessageBox.Show("hbhid不能为空"); return; } ts.hbhid = txthbhid.Text; if (txtgx.Text == "") { MessageBox.Show("工序不能为空"); return; } ts.gx = txthbhid.Text; w.toothSpecs = new ToothSpec[] { ts }; SYWebServiceClient webService = new SYWebServiceClient(); int flag = webService.upLoadWorkList("WS访问访问账户", "WS访问密码", new WorkList[] { w }); switch (flag) { case 0: MessageBox.Show("上传工单成功!"); break; case 1: MessageBox.Show("工单编号为空"); break; case 2: MessageBox.Show("诊所编号为空"); break; case 3: MessageBox.Show("没有文件信息上传"); break; case 4: MessageBox.Show("没有工单信息可以上传"); break; case 5: MessageBox.Show("没有工单图片文件可以上传"); break; case 6: MessageBox.Show("没有诊所信息可以上传"); break; case 7: MessageBox.Show("没有诊所信息可以上传"); break; case 8: MessageBox.Show("没有诊所信息可以更新"); break; case 9: MessageBox.Show("不安全的调用"); break; case 10: MessageBox.Show("不存在的工单[上传工单图片时检查]"); break; case 11: MessageBox.Show("输入输出异常"); break; case 12: MessageBox.Show("录入数据失败[存在重复数据]"); break; case 13: MessageBox.Show("应用程序异常"); break; case 14: MessageBox.Show("数据库异常"); break; } } /// <summary> /// 更新工单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUpdateWorkList_Click(object sender, EventArgs e) { WorkList w = new WorkList(); if (txtgdbh.Text == "") { MessageBox.Show("工单编号不能为空"); return; } w.gdbh = txtgdbh.Text; if (txtfggdbh.Text == "") { MessageBox.Show("返工原单号不能为空!"); return; } w.fggdbh = txtfggdbh.Text; if (txtzsidwokelist.Text == "") { MessageBox.Show("诊所编号不能为空"); return; } w.zsid = txtzsidwokelist.Text; if (txtysxm.Text == "") { MessageBox.Show("医生姓名不能为空"); return; } w.ysxm = txtysxm.Text; if (txtbrxm.Text == "") { MessageBox.Show("病人姓名不能为空"); return; } w.brxm = txtbrxm.Text; if (textBox7.Text == "") { MessageBox.Show("业务员不能为空"); return; } w.ywy = textBox7.Text; if (txtssdq.Text == "") { MessageBox.Show("所属地区不能为空"); return; } w.ssdq = txtssdq.Text; if (txtfgyy.Text == "") { MessageBox.Show("返工原因不能为空"); } w.cjrq = ftpcjrq.Value.ToString("yyyy-mm-dd hh:mm:ss"); w.jzrq = dtpjzrq.Value.ToString("yyyy-mm-dd hh:mm:ss"); w.xgrq = dtpxgrq.Value.ToString("yyyy-mm-dd hh:mm:ss"); ToothSpec ts = new ToothSpec(); if (txttoothSpecId.Text == "") { MessageBox.Show("规格编号不能为空"); return; } ts.toothSpecId = txttoothSpecId.Text; if (txtluz.Text == "") { MessageBox.Show("录入人不能为空"); return; } w.luz = txtcjr.Text; if (txtlx.Text == "") { MessageBox.Show("牙齿类型不能为空"); return; } ts.yclx = txtlx.Text; if (texzl.Text == "") { MessageBox.Show("牙齿总类不能为空"); return; } ts.zl = texzl.Text; if (txtys.Text == "") { MessageBox.Show("牙齿颜色不能为空"); return; } ts.ys = txtys.Text; if (txxjg.Text == "") { MessageBox.Show("JG不能为空"); return; } ts.jg = int.Parse(txxjg.Text); if (textyw.Text == "") { MessageBox.Show("牙位不能为空"); return; } ts.yw = textyw.Text; if (txtdx.Text == "") { MessageBox.Show("牙齿大小不能为空"); return; } ts.dx = txtdx.Text; if (textsl.Text == "") { MessageBox.Show("数量1不能为空"); return; } ts.sl = int.Parse(textsl.Text); if (textaddsl.Text == "") { MessageBox.Show("数量2不能为空"); return; } ts.addsl = int.Parse(textaddsl.Text); if (txthbhid.Text == "") { MessageBox.Show("hbhid不能为空"); return; } ts.hbhid = txthbhid.Text; if (txtgx.Text == "") { MessageBox.Show("工序不能为空"); return; } ts.gx = txthbhid.Text; w.toothSpecs = new ToothSpec[] { ts }; SYWebServiceClient webService = new SYWebServiceClient(); int flag = webService.updateWorkList("WS访问访问账户", "WS访问密码", w); switch (flag) { case 0: MessageBox.Show("更新工单成功!"); break; case 1: MessageBox.Show("工单编号为空"); break; case 2: MessageBox.Show("诊所编号为空"); break; case 3: MessageBox.Show("没有文件信息上传"); break; case 4: MessageBox.Show("没有工单信息可以上传"); break; case 5: MessageBox.Show("没有工单图片文件可以上传"); break; case 6: MessageBox.Show("没有诊所信息可以上传"); break; case 7: MessageBox.Show("没有诊所信息可以上传"); break; case 8: MessageBox.Show("没有诊所信息可以更新"); break; case 9: MessageBox.Show("不安全的调用"); break; case 10: MessageBox.Show("不存在的工单[上传工单图片时检查]"); break; case 11: MessageBox.Show("输入输出异常"); break; case 12: MessageBox.Show("录入数据失败[存在重复数据]"); break; case 13: MessageBox.Show("应用程序异常"); break; case 14: MessageBox.Show("数据库异常"); break; } } /// <summary> /// 删除工单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRemoveWorklist_Click(object sender, EventArgs e) { if (txtgdbh.Text == "") { MessageBox.Show("要删除的工单编号不能为空"); return; } SYWebServiceClient webService = new SYWebServiceClient(); int flag = webService.removeWorkList("WS访问访问账户", "WS访问密码", txtgdbh.Text); switch (flag) { case 0: MessageBox.Show("删除工单成功!"); break; case 1: MessageBox.Show("工单编号为空"); break; case 2: MessageBox.Show("诊所编号为空"); break; case 3: MessageBox.Show("没有文件信息上传"); break; case 4: MessageBox.Show("没有工单信息可以上传"); break; case 5: MessageBox.Show("没有工单图片文件可以上传"); break; case 6: MessageBox.Show("没有诊所信息可以上传"); break; case 7: MessageBox.Show("没有诊所信息可以上传"); break; case 8: MessageBox.Show("没有诊所信息可以更新"); break; case 9: MessageBox.Show("不安全的调用"); break; case 10: MessageBox.Show("不存在的工单[上传工单图片时检查]"); break; case 11: MessageBox.Show("输入输出异常"); break; case 12: MessageBox.Show("录入数据失败[存在重复数据]"); break; case 13: MessageBox.Show("应用程序异常"); break; case 14: MessageBox.Show("数据库异常"); break; } } /// <summary> /// 上传工单图片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUpload_Click(object sender, EventArgs e) { if (txtpicwokelistid.Text == "") { MessageBox.Show("请输入工单编号"); return; } SYWebServiceClient webService = new SYWebServiceClient(); OpenFileDialog openFile = new OpenFileDialog(); openFile.ShowDialog(); WorkListPicFile file = new WorkListPicFile(); //获得唯一图片名字 String saveFile = Guid.NewGuid().ToString() + openFile.FileName.Substring(openFile.FileName.Length - 4, 4); Console.WriteLine("图片名称:" + saveFile); FileStream fs = null; int filg = -1; try { fs = new FileStream(openFile.FileName, FileMode.Open); file.serverFile = saveFile; file.fileSize = fs.Length; Console.WriteLine("开始上传图片,文件总共大小为:" + fs.Length); byte[] bytes = new byte[1024 * 1024]; int size = 0; do { size = fs.Read(bytes, 0, 1024 * 1024); if (size <= 0) { break; } byte[] fixedBytes = new byte[size]; Array.Copy(bytes, fixedBytes, size); file.bytes = fixedBytes; file.workListId = txtpicwokelistid.Text; filg = webService.upLoadWorkListPic("WS访问访问账户", "WS访问密码", file); if (filg != 0) { break; } file.position = (file.position + fixedBytes.Length); Console.WriteLine("上传成功,已上传" + file.position + "字节"); } while (size > 0); } catch (Exception exce) { MessageBox.Show(exce.Message); } finally { if (null != fs) { fs.Close(); } switch (filg) { case 0: MessageBox.Show("上传工单图片成功!"); break; case 1: MessageBox.Show("工单编号为空"); break; case 2: MessageBox.Show("诊所编号为空"); break; case 3: MessageBox.Show("没有文件信息上传"); break; case 4: MessageBox.Show("没有工单信息可以上传"); break; case 5: MessageBox.Show("没有工单图片文件可以上传"); break; case 6: MessageBox.Show("没有诊所信息可以上传"); break; case 7: MessageBox.Show("没有诊所信息可以上传"); break; case 8: MessageBox.Show("没有诊所信息可以更新"); break; case 9: MessageBox.Show("不安全的调用"); break; case 10: MessageBox.Show("不存在的工单[上传工单图片时检查]"); break; case 11: MessageBox.Show("输入输出异常"); break; case 12: MessageBox.Show("录入数据失败[存在重复数据]"); break; case 13: MessageBox.Show("应用程序异常"); break; case 14: MessageBox.Show("数据库异常"); break; } } } /// <summary> /// 修改牙齿工s序 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUpdate_Click(object sender, EventArgs e) { if (txtycbh.Text == "") { MessageBox.Show("请输入牙齿编号"); return; } if (txtycgx.Text == "") { MessageBox.Show("请输入工序"); return; } SYWebServiceClient webService = new SYWebServiceClient(); int filg = webService.updateToothSpecGX(txtycbh.Text, txtycgx.Text); Console.WriteLine("修改状态:"+filg); switch (filg) { case 0: MessageBox.Show("修改牙齿工序成功!"); break; case 1: MessageBox.Show("工单编号为空"); break; case 2: MessageBox.Show("诊所编号为空"); break; case 3: MessageBox.Show("没有文件信息上传"); break; case 4: MessageBox.Show("没有工单信息可以上传"); break; case 5: MessageBox.Show("没有工单图片文件可以上传"); break; case 6: MessageBox.Show("没有诊所信息可以上传"); break; case 7: MessageBox.Show("没有诊所信息可以上传"); break; case 8: MessageBox.Show("没有诊所信息可以更新"); break; case 9: MessageBox.Show("不安全的调用"); break; case 10: MessageBox.Show("不存在的工单[上传工单图片时检查]"); break; case 11: MessageBox.Show("输入输出异常"); break; case 12: MessageBox.Show("录入数据失败[存在重复数据]"); break; case 13: MessageBox.Show("应用程序异常"); break; case 14: MessageBox.Show("数据库异常"); break; } } private void groupBox1_Enter(object sender, EventArgs e) { } }}