📄 jax2.htm
字号:
} catch (Exception ex)
{<BR>
ex.printStackTrace();
<BR>
}<BR> }<BR>} </P></BLOCKQUOTE>
<P><B>编译运行动态代理实例</B> </P>
<P>执行如下步骤: </P>
<P>1、 如果没有准备好,按照“<A
href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.1.htm#an">安装</A>”部分的指令进行。</P>
<P>2、
进入<I><JWSD_HOME></I>/docs/tutorial/examples/jaxrpc/proxy目录中。</P>
<P>3、 输入如下命令:</P>
<P> ant build<BR> ant
deploy<BR> ant
build-dynamic<BR> ant run </P>
<P>客户端应该显示如下信息: </P>
<P>A dynamic proxy hello to Buzz! </P>
<H2><A name=yi></A><FONT size=4>一个动态调用接口(DII)客户实例</FONT></H2>
<P>使用动态调用接口(DII),即使直到调用时还不知道远程过程的签名或服务的名字,客户仍然可以调用远程过程。</P>
<P>由于DII客户的灵活性,它可以被用在服务代理程序中,用来动态找到服务,配置远程调用,执行调用。例如,一个在线服饰店的应用程序可以访问某个服务代理程序来专门负责运送。该代理程序将使用XML注册(JAXR)用的Java
API来查找满足某些标准的,例如低价格或者快速运送时间,运送公司的服务。运行时,代理程序使用DII来调用运送公司的Web服务上的远程过程。作为服饰店和运送公司间的一个中介,代理程序为所有各方都提供了好处。对于服饰店,它简化了运送处理,而对于运送公司,它为其找到了客户。</P>
<P><B>DII HelloClient</B><B>清单</B> </P>
<P>这儿是<I><JWSD_HOME></I>/docs/tutorial/examples/jaxrpc/dynamic目录中的<A
href="http://java.sun.com/webservices/docs/1.1/tutorial/examples/jaxrpc/dynamic/HelloClient.java">HelloClient.java</A>文件的完整清单。</P>
<BLOCKQUOTE>
<P>package dynamic;</P>
<P>import javax.xml.rpc.Call;<BR>import
javax.xml.rpc.Service;<BR>import
javax.xml.rpc.JAXRPCException;<BR>import
javax.xml.namespace.QName;<BR>import
javax.xml.rpc.ServiceFactory;<BR>import
javax.xml.rpc.ParameterMode;</P>
<P> public class HelloClient {</P>
<P> private static String endpoint
=<BR>
"http://localhost:8080/dynamic-jaxrpc/dynamic";<BR>
private static String qnameService =
"Hello";<BR> private static String
qnamePort = "HelloIF";</P>
<P><BR> private static String
BODY_NAMESPACE_VALUE
=<BR> "http://dynamic.org/wsdl";<BR>
private static String ENCODING_STYLE_PROPERTY
=<BR>
"javax.xml.rpc.encodingstyle.namespace.uri";<BR> private
static String NS_XSD
=<BR> "http://www.w3.org/2001/XMLSchema";<BR>
private static String URI_ENCODING
=<BR>
"http://schemas.xmlsoap.org/soap/encoding/";</P>
<P><BR> public static void main(String[]
args) {<BR> try
{</P>
<P><BR>
ServiceFactory factory
=<BR> ServiceFactory.newInstance();<BR>
Service service
=<BR> factory.createService(new
QName(qnameService)); </P>
<P><BR>
QName
port = new QName(qnamePort);</P>
<P><BR>
Call
call =
service.createCall(port);<BR>
call.setTargetEndpointAddress(endpoint);<BR>
call.setProperty(Call.SOAPACTION_USE_PROPERTY,<BR> new
Boolean(true));<BR>
call.setProperty(Call.SOAPACTION_URI_PROPERTY,"");<BR>
call.setProperty(ENCODING_STYLE_PROPERTY,<BR>
URI_ENCODING);<BR>
QName QNAME_TYPE_STRING
=<BR> new
QName(NS_XSD,
"string");<BR>
call.setReturnType(QNAME_TYPE_STRING);
<BR>
call.setOperationName(
<BR>
new QName(BODY_NAMESPACE_VALUE
"sayHello"));<BR><BR>
call.addParameter("String_1",
QNAME_TYPE_STRING,<BR> ParameterMode.IN);<BR>
String[] params = { "Duke!"
};<BR>
String result =
(String)call.invoke(params);<BR>
System.out.println(result);<BR>
} catch (Exception ex) {
<BR>
ex.printStackTrace();
<BR>
}<BR> }<BR>} </P></BLOCKQUOTE>
<P><B>编译运行DII实例</B> </P>
<P>执行下列步骤: </P>
<P>1. 如果没有准备好,按照“<A
href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.1.htm#an">安装</A>”部分的指令进行。
</P>
<P>2.
进入<I><JWSD_HOME></I>/docs/tutorial/examples/jaxrpc/dynamic目录。</P>
<P>3. 键入下列命令:</P>
<BLOCKQUOTE>
<P>ant build<BR>ant deploy<BR>ant build-dynamic<BR>ant run
</P></BLOCKQUOTE>
<P>客户端应该显示如下信息: </P>
<BLOCKQUOTE>
<P>A dynamic hello to Duke! </P></BLOCKQUOTE>
<H2>wscompile<A name=wscompile></A>工具</H2>
<P>在JAX-RPC客户和服务中,wscompile工具用于生成占位程序、约束、序列化以及WSDL文件。工具读取用作输入的配置文件,以及某个WSDL文件或定义了服务的RMI接口。
</P>
<P><B>语法</B></P>
<BLOCKQUOTE>
<P>wscompile [options]<BR><configuration-file>
</P></BLOCKQUOTE>
<P>按照惯例配置文件名为config.xml,但并不要求必须是这个文件。</P>
<P>下表列出了wscompile的选项。注意必须完整的指定-import、-define、-gen选项中的一项。</P>
<P><EM>表11-3 wscompile选项</EM> </P>
<TABLE cellPadding=0 border=1>
<TBODY>
<TR>
<TD>
<P style="TEXT-ALIGN: center"
align=center><B>选项</B></P></TD>
<TD>
<P style="TEXT-ALIGN: center"
align=center><B>说明</B></P></TD></TR>
<TR>
<TD>
<P>-classpath <path> </P></TD>
<TD>
<P>指定查找输入类文件的路径;在Windows平台,路径应该包含在引号中,例如:-classpath
"\test;\foo;\acct" </P></TD></TR>
<TR>
<TD>
<P>-cp <path> </P></TD>
<TD>
<P>与 -classpath <path> 选项相同</P></TD></TR>
<TR>
<TD>
<P>-d <directory> </P></TD>
<TD>
<P>指定存放生成的输出文件的路径</P></TD></TR>
<TR>
<TD>
<P>-define </P></TD>
<TD>
<P>读取服务的RMI接口,定义一个服务</P></TD></TR>
<TR>
<TD>
<P>-f:<features> </P></TD>
<TD>
<P>使given属性可用(参见下表的属性清单。当指定多个属性时,以逗号间隔。)</P></TD></TR>
<TR>
<TD>
<P>-features:<features> </P></TD>
<TD>
<P>与-f:<features> 相同</P></TD></TR>
<TR>
<TD>
<P>-g </P></TD>
<TD>
<P>生成调试信息</P></TD></TR>
<TR>
<TD>
<P>-gen </P></TD>
<TD>
<P>与-gen:client 相同</P></TD></TR>
<TR>
<TD>
<P>-gen:client </P></TD>
<TD>
<P>生成客户事务(占位程序,等。)</P></TD></TR>
<TR>
<TD>
<P>-gen:server </P></TD>
<TD>
<P>生成服务器事务(约束,等。)以及WSDL文件(如果正在使用wsdeploy,不必指定该选项。)</P></TD></TR>
<TR>
<TD>
<P>-gen:both </P></TD>
<TD>
<P>生成客户和服务器事务</P></TD></TR>
<TR>
<TD>
<P>-httpproxy:<host>:<port> </P></TD>
<TD>
<P>指定一个HTTP代理服务器(端口默认为8080)</P></TD></TR>
<TR>
<TD>
<P>-import </P></TD>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -