WEB开发网      濠电姷鏁告繛鈧繛浣冲洤纾瑰┑鐘宠壘閻ょ偓銇勯幇鍫曟闁稿鍠愰妵鍕冀閵娧佲偓鎺楁⒒閸曨偄顏柡宀嬬畱铻e〒姘煎灡绗戦梻浣筋嚙濮橈箓顢氳濠€浣糕攽閻樿宸ュΔ鐘叉啞缁傚秹宕滆绾惧ジ寮堕崼娑樺缂佹宀搁弻鐔风暋閻楀牆娈楅梺璇″枓閺呯姴鐣疯ぐ鎺濇晝闁靛牆妫欓蹇旂節閻㈤潧浠﹂柛銊ョ埣楠炴劙骞橀鑲╋紱闂佽宕樼粔顔裤亹閹烘挸浜归梺缁樺灦閿曗晛螞閸曨垱鈷戦柟鑲╁仜婵″ジ鎮楀☉鎺撴珖缂侇喖顑呴鍏煎緞濡粯娅囬梻浣瑰缁诲倿寮绘繝鍥ㄦ櫇闁稿本绋撻崢鐢告煟鎼淬垻鈯曢柨姘舵煟韫囥儳绋荤紒缁樼箖缁绘繈宕橀妸褌绱濋梻浣筋嚃閸ㄤ即宕弶鎴犳殾闁绘梻鈷堥弫鍌炴煕閳锯偓閺呮瑧妲愬Ο琛℃斀闁绘劕妯婇崵鐔封攽椤旇棄鍔ら摶鐐烘煕閺囥劌澧柛娆忕箻閺屽秹宕崟顒€娅g紓浣插亾濠㈣泛顑囩粻楣冩煙鐎涙ḿ绠橀柨娑樼У椤ㄣ儵鎮欓鍕紙闂佽鍠栫紞濠傜暦閹偊妲诲┑鈩冨絻椤兘寮诲☉銏犖╅柕澶堝労閸斿绱撴担绋库偓鍝ョ矓瑜版帒鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘 ---闂傚倸鍊烽悞锔锯偓绗涘厾娲煛閸涱厾顔嗛梺璺ㄥ櫐閹凤拷
开发学院WEB开发Jsp 使用JWSDP完成Web Service在java的入门(四) 阅读

使用JWSDP完成Web Service在java的入门(四)

 2008-01-05 08:10:56 来源:WEB开发网 闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�闂傚倸鍊风粈渚€骞夐敓鐘插瀭闁汇垹鐏氬畷鏌ユ煙閹殿喖顣奸柛搴$У閵囧嫰骞掗幋婵冨亾閻㈢ǹ纾婚柟鐐灱濡插牊绻涢崱妤冃℃繛宀婁簽缁辨捇宕掑鎵佹瀸闂佺懓鍤栭幏锟�濠电姷鏁告慨顓㈠箯閸愵喖宸濇い鎾寸箘閹规洟姊绘笟鈧ḿ褍煤閵堝悿娲Ω閳轰胶鍔﹀銈嗗笂閼冲爼鍩婇弴銏$厪闁搞儮鏅涙禒褏绱掓潏鈺佷槐闁轰焦鎹囬弫鎾绘晸閿燂拷闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�  闂傚倸鍊烽懗鑸电仚缂備胶绮〃鍛村煝瀹ュ鍗抽柕蹇曞У閻庮剟姊虹紒妯哄闁诲繑姘ㄩ埀顒佸嚬閸撶喎顫忓ú顏勫瀭妞ゆ洖鎳庨崜浼存⒑闁偛鑻晶顔剧磼婢跺﹦绉虹€殿喖顭锋俊姝岊槷闁稿鎹囧Λ鍐ㄢ槈濞嗗繑娈橀梻浣风串缂嶁偓濞存粠鍓熼崺鈧い鎺戝€归弳顒勬煕鐎n亷韬€规洑鍗冲鍊燁槾闁哄棴绠撻弻銊╂偆閸屾稑顏�
核心提示:其中的各个任务都有说明.注重,假如你使用JAX-RPC1.1.2的话,使用JWSDP完成Web Service在java的入门(四),wsdeploy生成web.xml文件有些小错误,需要手工更改,借助jsp插件,使用Eclipse完成了一个简单的Web服务开发,这个问题在1.1.3中已经修正.好了,在Eclipse中

  其中的各个任务都有说明.
  
  注重,假如你使用JAX-RPC1.1.2的话,wsdeploy生成web.xml文件有些小错误,需要手工更改,这个问题在1.1.3中已经修正.
  
  好了,在Eclipse中运行各个任务,把最后得到的skysoft.war,作为一个新的应用发布,也可发布到你现有的应用,需要解压这个文件,然后拷贝需要的文件以及库文件到你的应用中即可.
  
  (四) 调用服务
  
  调用服务的方式有三种:静态调用,动态调用,动态调用接口.
  
  1 静态调用,使用了wscompile生成的静态桩文件.
  
  package hello;
  
  import javax.xml.rpc.Stub;
  
  import staticstub.*;
  
  public class HelloClient {
  
  PRivate String endpointAddress;
  
  public static void main(String[] args) {
  
  args=new String[]{"http://localhost:8080/skysoft/hello?WSDL"};
  
  System.out.println("Endpoint address = " + args[0]);
  
  try {
  
  Stub stub = createProxy();
  
  stub._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY,
  
  args[0]);
  
  HelloIF hello = (HelloIF) stub;
  
  System.out.println(hello.sayHello("Duke!"));
  
  } catch (Exception ex) {
  
  ex.printStackTrace();
  
  }
  
  }
  
  private static Stub createProxy() {
  
  // Note: MyHelloService_Impl is implementation-specific.
  
  return (Stub) (new MyHelloService_Impl().getHelloIFPort());
  
  }
  
  }
  
  2 动态调用,主要是使用ServiceFactory来执行调用.
  
  package hello;
  
  import java.net.URL;
  
  import javax.xml.rpc.Service;
  
  import javax.xml.rpc.JAXRPCException;
  
  import javax.xml.namespace.QName;
  
  import javax.xml.rpc.ServiceFactory;
  
  //import dynamicproxy.HelloIF;
  
  import staticstub.HelloIF;
  
  public class DynClient {
  
  public static void main(String[] args) {
  
  try {
  
  args = new String[] { "http://localhost:8080/skysoft/hello" };
  
  
  String UrlString = args[0] + "?WSDL";
  
  String nameSpaceUri = "urn:Foo";
  
  String serviceName = "MyHelloService";
  
  String portName = "HelloIFPort";
  
  System.out.println("UrlString = " + UrlString);
  
  URL helloWsdlUrl = new URL(UrlString);
  
  ServiceFactory serviceFactory = ServiceFactory.newInstance();
  
  Service helloService = serviceFactory.createService(helloWsdlUrl,
  
  new QName(nameSpaceUri, serviceName));
  
  HelloIF myProxy = (HelloIF) helloService.getPort(new QName(
  
  nameSpaceUri, portName), HelloIF.class);
  
  System.out.println(myProxy.sayHello("Buzz"));
  
  } catch (Exception ex) {
  
  ex.printStackTrace();
  
  }
  
  }
  
  }
  
  3 动态调用接口(DII),这种方式不需要任何附加代码,根据WSDL提供的调用方法的元描述,动态确定方法及其参数返回类型,有些类似于CORBA的接口池提供的服务.
  
  package hello;
  
  import javax.xml.rpc.Call;
  
  import javax.xml.rpc.Service;
  
  import javax.xml.rpc.JAXRPCException;
  
  import javax.xml.namespace.QName;
  
  import javax.xml.rpc.ServiceFactory;
  
  import javax.xml.rpc.ParameterMode;
  
  public class DiiClient {
  
  private static String qnameService = "MyHelloService";
  
  private static String qnamePort = "HelloIF";
  
  private static String BODY_NAMESPACE_VALUE = "urn:Foo";
  
  private static String ENCODING_STYLE_PROPERTY = "javax.xml.rpc.encodingstyle.namespace.uri";
  
  private static String NS_XSD = "http://www.w3.org/2001/XMLSchema";
  
  private static String URI_ENCODING = "http://schemas.xmlsoap.org/soap/encoding/";
  
  public static void main(String[] args) {
  
  args=new String[]{"http://localhost:8080/skysoft/hello?WSDL"};
  
  System.out.println("Endpoint address dii = " + args[0]);
  
  try {
  
  ServiceFactory factory = ServiceFactory.newInstance();
  
  Service service = factory.createService(new QName(qnameService));
  
  QName port = new QName(qnamePort);
  
  Call call = service.createCall(port);
  
  call.setTargetEndpointAddress(args[0]);
  
  call.setProperty(Call.SOAPACTION_USE_PROPERTY, new Boolean(true));
  
  call.setProperty(Call.SOAPACTION_URI_PROPERTY, "");
  
  call.setProperty(ENCODING_STYLE_PROPERTY, URI_ENCODING);
  
  QName QNAME_TYPE_STRING = new QName(NS_XSD, "string");
  
  call.setReturnType(QNAME_TYPE_STRING);
  
  call.setOperationName(new QName(BODY_NAMESPACE_VALUE, "sayHello"));
  
  call.addParameter("String_1", QNAME_TYPE_STRING, ParameterMode.IN);
  
  String[] params = { "Murph!" };
  
  String result = (String) call.invoke(params);
  
  System.out.println(result);
  
  
  } catch (Exception ex) {
  
  ex.printStackTrace();
  
  }
  
  }
  
  }
  
  到此,这个Web Service入门描述就结束了,它提供了WS的Sun描述,以及在tomcat上发布服务的过程和一个构建脚本,借助jsp插件,使用Eclipse完成了一个简单的Web服务开发,发布,并用三种方式进行了测试.

Tags:使用 JWSDP 完成

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接