欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
使用JWSDP完成Web Service

  Web Service在java領(lǐng)域,AXIS因其容易使用,很多項目都使用了它,對于Sun提供的Web Service技術(shù),則不多使用,現更新有關(guān)版本,重新使用了一下Sun提供的JWSDP,并寫(xiě)了這篇入門(mén).供需要者參考.

  Sun公司的Web Service

  Web服務(wù)是基于web的使用開(kāi)放的基于xml標準的企業(yè)應用,是和調用客戶(hù)端交換數據的傳輸協(xié)議,Java技術(shù)和WEB服務(wù)被組織成這些亞類(lèi):

  Java Web Services Developer Pack (Java WSDP) 
  Java API for XML-Based RPC (JAX-RPC) 
  Java API for XML Registries (JAXR) 
  Java API for XML Processing (JAXP) 
  Java Architecture for XML Binding (JAXB) 
  SOAP with Attachments API for Java (SAAJ) 
  XML and Web Services Security
 

  JAX-RPC代表基于xml遠程過(guò)程調用的java API,是一項為構建使用RPC和XML的Web服務(wù)和客戶(hù)端的技術(shù),通常用于分布式的CS模式中,它是一種RPC機制能使客戶(hù)端執行其他系統上的過(guò)程.

  在JAX-RPC中,一個(gè)RPC由基于XML協(xié)議如SOAP表示,這個(gè)SOAP規范定義了一個(gè)信封結構,編碼規則以及為代表遠程調用和響應的協(xié)定.這些調用和響應作為SOAP消息在HTTP上傳輸.

  盡管SOAP消息復雜,但JAX-RPC API向應用開(kāi)發(fā)者隱藏了這些復雜性.在服務(wù)器端,開(kāi)發(fā)者指定那個(gè)調用過(guò)程是通過(guò)用java語(yǔ)言寫(xiě)的接口定義的方法, 開(kāi)發(fā)者還要編碼一個(gè)或多個(gè)實(shí)現這些方法的類(lèi).客戶(hù)端程序也容易編碼:一個(gè)客戶(hù)端創(chuàng )建一個(gè)代理(一個(gè)代表服務(wù)的本地對象),然后簡(jiǎn)單的在那個(gè)代理上調用那個(gè)方法.使用JAX-RPC,開(kāi)發(fā)者不用生成或分析SOAP消息,這是JAX-RPC運行時(shí)系統做的事情:它在來(lái)往的API調用和響應到SOAP消息之間進(jìn)行轉換.

  使用JAX-RPC,客戶(hù)端和web services有一個(gè)巨大的好處:java編程語(yǔ)言的平臺獨立性.此外,JAX-RPC沒(méi)有限制: 一個(gè)JAX-RPC客戶(hù)端能訪(fǎng)問(wèn)一個(gè)并不在java平臺上運行的web服務(wù),反之亦然.這個(gè)靈活性是可能的以為JAX-RPC使用由W3C定義的技術(shù):HTTP, SOAP,WSDL. WSDL為把一個(gè)服務(wù)在消息上描述為一套端點(diǎn)操作指定了一個(gè)XML格式.
 

 

  二 SUN提供的WEB服務(wù)構建工具

  J2EE提供了APIs和創(chuàng )建,發(fā)布可互操作WS和客戶(hù)端的工具,其中JAX-RPC(SI)標準實(shí)現提供了wscompile 和 wsdeploy 工具,使你開(kāi)發(fā),發(fā)布,調用Web Service:

  1  wscompile可接受兩種輸入:WSDL和Service Endpoint Interface,輸出為可移植制品和model文件.

  2  wsdeploy只有一種輸入:包括wscompile輸入和輸出再加上一個(gè)部署描述符文件,輸出是可發(fā)布的特定平臺上的web service.

  這些工具同Java WSDP一起打包可供使用,java web服務(wù)開(kāi)發(fā)包是一個(gè)免費的集成工具箱,用它構建,測試,發(fā)布XML應用,web服務(wù)以及帶有最新web服務(wù)技術(shù)和標準實(shí)現的web應用.

  (一) wscompile工具

  1 工具介紹

  它生成由JAX-RPC運行時(shí)需要的各種客戶(hù)端和服務(wù)端制品以供開(kāi)發(fā),部署,調用一個(gè)Web服務(wù). 這個(gè)工具有兩種使用形式:批處理和Ant構建腳本.

  wscompile -gen -classpath lib/foo.jar;lib/bar.jar -d generated config.xml
  wscompile -gen  -f:infix:Name -d generated config.xml
  wscompile -define -f:nodatabinding -f:novalidation config.xml
  wscompile -import -f:explicitcontext config.xml

  Ant腳本,在A(yíng)nt中使用這個(gè)任務(wù)前要先定義:

<taskdef name="wscompile" classname="com.sun.xml.rpc.tools.ant.Wscompile">
    <classpath path="${classpath}"/>
</taskdef>

  其中的類(lèi)路徑要指向以下檔案庫:

jaxrpc-api.jar
jaxrpc-impl.jar
jaxrpc-spi.jar
saaj-api.jar
saaj-impl.jar
jaxp-api.jar
dom.jar
sax.jar
xalan.jar
xercesImpl.jar
activation.jar
mail.jar
jax-qname.jar
namespace.jar
xsdlib.jar
relaxngDatatype.jar

  例子:

 (二) wsdeploy工具

  1 工具介紹

  這個(gè)工具和wscompile協(xié)同工作來(lái)生成一個(gè)能在任何servlet容器中發(fā)布的war文件,它授受一個(gè)生WAR文件,它包括一個(gè)SEI,一個(gè)SEI實(shí)現,一些值類(lèi)型,一些服務(wù)特定的異常,一個(gè)model文件,一個(gè)部署描述符(jaxrpc-ri.xml), 和一些可選的其它實(shí)現特定的制品.工具處理生的war文件并生成一個(gè)實(shí)現特定的熟的war文件.這個(gè)過(guò)程包括生成串行化器,連接(TIEs),運行時(shí)描述符以及其它為了成功的發(fā)布WS需要的制品. 這個(gè)工具也有兩種使用形式:批處理和Ant構建腳本.

  批的例子:

wsdeploy -o target.war myapp.war
Ant腳本,在A(yíng)nt中使用這個(gè)任務(wù)前要先定義:
<taskdef name="wsdeploy" classname="com.sun.xml.rpc.tools.ant.Wsdeploy">
    <classpath path="${classpath}"/>
</taskdef>
其中的類(lèi)路徑指向同wscompile相同:
<wsdeploy  classpath="xyz.jar"  tmpdir="${tmp}"  outWarFile="stock.war"  inWarFile="stock-raw.war"/>
<wsdeploy  keep="true" outWarFile="stock.war" inWarFile="stock-raw.war"><classpath refid="compile.classpath"/></wsdeploy>
<wsdeploy fork="true" source="1.0.3" outWarFile="stock.war"  inWarFile="stock-raw.war"></wsdeploy>

  2 wscompile的配置文件(部署描述符 jaxrpc-ri.xml)

  它被打包在生的WAR文件中,并由wsdeploy工具使用來(lái)生成熟的WAR文件.這個(gè)描述符提供了wsdeploy工具向web容器中發(fā)布WS的信息.

  該文件主要是使用endpoint和endpointMapping兩個(gè)元素來(lái)定義端點(diǎn)和服務(wù)影射,把SEI及其實(shí)現聚集在一起,連同model文件提供給發(fā)布工具.

  三 編寫(xiě)一個(gè)Hello例子

  IDE環(huán)境:Eclipse,插件sysdeo,發(fā)布環(huán)境:Tomcat559.

  使用類(lèi)庫:Sun公司的參考實(shí)現.

本例要使用的材料:

  1  HelloIF.java,一個(gè)SEI接口,它擴展了Remote接口.

  2  HelloImpl.java,實(shí)現了SEI接口.

  3  web.xml ,這個(gè)文件可以是你的任何Web應用的部署描述符文件,這個(gè)例子可以發(fā)布到你的現有Web應用,只需要把那個(gè)應用的部署描述符文件放在開(kāi)發(fā)環(huán)境的WEB-INF文件夾下.

  4  config-interface.xml,描述SEI接口.

  5  config-wsdl.xml,使用WSDL描述服務(wù)接口,本例不介紹這個(gè)文件的使用方法,通常這個(gè)使用場(chǎng)景多是為訪(fǎng)問(wèn)服務(wù)生成客戶(hù)端stub文件.另一個(gè)場(chǎng)景就是加入自定義的java類(lèi)型到SOAP類(lèi)型的影射等等很多細微的控制,或者是完全替代SEI接口.

  以上文件的位置,可參看下圖:

  1 編寫(xiě)SEI,HelloIF:

package helloservice;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloIF extends Remote {
    public String sayHello(String s) throws RemoteException;
}

  2 實(shí)現SEI:

package helloservice;
public class HelloImpl implements HelloIF {
    public String message ="Hello";
    public String sayHello(String s) {
        return message + s;
    }
}

  3 配置文件 config-interface.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
 <service name="MyHelloService" targetNamespace="urn:Foo"
  typeNamespace="urn:Foo" packageName="helloservice">
  <interface name="helloservice.HelloIF"
   servantName="helloservice.HelloImpl" />
 </service>
</configuration>

4 構建服務(wù),下面是一個(gè)Ant構建腳本.

<?xml version="1.0" encoding="GBK"?>
<project name="webservice" default="build" basedir=".">
 <property name="jaxrpc.lib.dir" value="D:\Sun\AppServer\lib">
 </property>
 <property name="classes.dir" value=".\build\classes">
 </property>
 <property name="src.dir" value=".\build\src">
 </property>
 <property name="war.file" value="hello_raw.war">
 </property>
 <property name="nonclass.dir" value=".\build\nonclass">
 </property>
 <property name="build" value="${nonclass.dir}">
 </property>
 <property name="assemble" value=".\assemble">
 </property>
 <property name="assemble.war" value=".\assemble\war">
 </property>
 <property name="assemble.ear" value=".\assemble\ear">
 </property>
 <path id="jaxrpc-classpath">
  <fileset dir="${jaxrpc.lib.dir}">
   <include name="**/*.jar" />
  </fileset>
  <fileset dir="D:\jdbc\postgresql">
   <include name="*.jar" />
  </fileset>
 </path>
 <path id="compile.classpath">
  <fileset dir="${jaxrpc.lib.dir}">
   <include name="**/*.jar" />
  </fileset>
  <fileset dir="D:\jwsdp-1.5\jaxrpc\lib">
   <include name="**/*.jar" />
  </fileset>
 </path>
 <taskdef name="wscompile" classpathref="jaxrpc-classpath" classname="com.sun.xml.rpc.tools.ant.Wscompile">
 </taskdef>
 <taskdef name="wsdeploy" classpathref="jaxrpc-classpath" classname="com.sun.xml.rpc.tools.ant.Wsdeploy">
 </taskdef>
 <target name="prepare">
  <mkdir dir="${src.dir}" />
  <mkdir dir="${nonclass.dir}" />
  <mkdir dir="${classes.dir}" />
  <mkdir dir="${assemble}" />
  <mkdir dir="${assemble.war}" />
  <mkdir dir="${assemble.ear}" />
 </target>
 <target name="build" depends="prepare" description="生成java制品,如生成可供wsdeploy使用的web檔案,稱(chēng)為生war,就象作菜一樣,先順菜,以及model,wsdl文件,這里生成的WSDL文件,wsdeploy并不使用">
  <echo message="build the WAR...." />
  <wscompile import="false" define="true" gen="false" keep="true" base="${classes.dir}" sourceBase="${src.dir}" classpath=".\classes" nonClassDir="${nonclass.dir}" model="model.xml.gz" xPrintStackTrace="true" config="config-interface.xml" verbose="true">
   <classpath refid="compile.classpath" />
  </wscompile>
 </target>
 <target name="deploy" description="生成可供發(fā)布的web檔案,稱(chēng)為煮熟的war,這個(gè)階段也生成了WSDL文件并被直接打包了">
  <echo message="deploy the WAR...." />
  <wsdeploy keep="false" verbose="true" tmpDir=".\tmp" outWarFile="skysoft.war" inWarFile="hello_raw.war">
   <classpath refid="compile.classpath" />
  </wsdeploy>
 </target>
 <target name="create-war" description="打包由wscompile生成的制品,以及所有發(fā)布所用的材料">
  <echo message="Creating the WAR...." />
  <delete file="${assemble.war}/${war.file}" />
  <delete dir="${assemble.war}/WEB-INF" />
  <copy todir="${assemble.war}/WEB-INF/classes/">
   <!--fileset dir="${build}/" includes="**/*.class" excludes="**/*Client.class, **/*.wsdl, **/*mapping.xml" /-->
   <fileset dir="./classes" includes="**/*.class" excludes="**/*Client.class, **/*.wsdl, **/*mapping.xml" />
  </copy>
  <copy todir="${assemble.war}/WEB-INF/lib/">
   <fileset dir="./lib" includes="**/*.jar" excludes="**/*Client.class, **/*.wsdl, **/*mapping.xml" />
  </copy>
  <copy file="jaxrpc-ri.xml" todir="${assemble.war}/WEB-INF" />
  <copy file="model.xml.gz" todir="${assemble.war}/WEB-INF" />
  <war destfile="${assemble.war}/${war.file}" webxml="./web.xml" filesonly="true">
   <fileset dir="${assemble.war}" includes="WEB-INF/**, build/**" />
  </war>
  <copy file="${assemble.war}/${war.file}" todir="." />
 </target>
 <target name="genstaticstub" description="生成靜態(tài)樁,供靜態(tài)的調用服務(wù)">
  <echo message="gen statics tub" />
  <wscompile client="true" keep="true" base="." sourceBase="." xPrintStackTrace="true" config="config-wsdl.xml" verbose="true">
   <classpath refid="compile.classpath" />
  </wscompile>
 </target>
 <target name="generate-dynamic-interface" description="根據WSDL文件生成SEI及其它材料,供動(dòng)態(tài)調用">
  <echo message="generate dynamic interface" />
  <wscompile import="true" keep="true" features="norpcstructures" base="./dynmicstub" sourceBase="./dynmicstub" xPrintStackTrace="true" config="config-wsdl.xml" verbose="true">
   <classpath refid="compile.classpath" />
  </wscompile>
 </target>
</project>

  其中的各個(gè)任務(wù)都有說(shuō)明.

  注意,如果你使用JAX-RPC1.1.2的話(huà),wsdeploy生成web.xml文件有些小錯誤,需要手工更改,這個(gè)問(wèn)題在1.1.3中已經(jīng)修正.

  好了,在Eclipse中運行各個(gè)任務(wù),把最后得到的skysoft.war,作為一個(gè)新的應用發(fā)布,也可發(fā)布到你現有的應用,需要解壓這個(gè)文件,然后拷貝需要的文件以及庫文件到你的應用中即可.

  (四) 調用服務(wù)

  調用服務(wù)的方式有三種:靜態(tài)調用,動(dòng)態(tài)調用,動(dòng)態(tài)調用接口.

  1 靜態(tài)調用,使用了wscompile生成的靜態(tài)樁文件.

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 動(dòng)態(tài)調用,主要是使用ServiceFactory來(lái)執行調用.

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 動(dòng)態(tài)調用接口(DII),這種方式不需要任何附加代碼,根據WSDL提供的調用方法的元描述,動(dòng)態(tài)確定方法及其參數返回類(lèi)型,有些類(lèi)似于CORBA的接口池提供的服務(wù).

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();
  }
 }
}

  到此,這個(gè)Web Service入門(mén)描述就結束了,它提供了WS的Sun描述,以及在tomcat上發(fā)布服務(wù)的過(guò)程和一個(gè)構建腳本,借助jsp插件,使用Eclipse完成了一個(gè)簡(jiǎn)單的Web服務(wù)開(kāi)發(fā),發(fā)布,并用三種方式進(jìn)行了測試.

 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
舊情復燃webservice
編寫(xiě)一個(gè)Web service客戶(hù)端
[收藏]REST WebService與SOAP WebService的比較
WebService學(xué)習,開(kāi)發(fā)總結--唐木之無(wú)線(xiàn)觀(guān)察
JAVA6開(kāi)發(fā)WebService (一)
Java開(kāi)發(fā)中經(jīng)常使用到的幾種WebService技術(shù)實(shí)現方案
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久