`
gjs622520
  • 浏览: 41872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

oracle webservice axis

阅读更多
公司有需求是这样的:一台服务器上用MemCached存一了些数据,另一台服务器的数据库上也存了数据,MemCached是数据库的映象,所以问题是数据同步。
数据库是oracle10g,暂考虑以webservice实现,oracle10g中可以使用webservice。
测试例子:
需要导入dbws-callout-utility-10131.zip地址:
http://download.oracle.com/technology/sample_code/tech/java/jsp/dbws-callout-utility-10131.zip
导入方法是这样的:
The jar file can be loaded into the SYS schema for everyone to access, or into an individual schema that needs access to the web client.

    # Load into the SYS schema.
    export PATH=/u01/app/oracle/product/10.2.0/db_1/bin:$PATH
    cd /u01/app/oracle/product/10.2.0/db_1/sqlj/lib
    # 10gR2
    loadjava -u sys/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar
    # 11g
    loadjava -u sys/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb11.jar

    # Load into an individual schema.
    export PATH=/u01/app/oracle/product/10.2.0/db_1/bin:$PATH
    cd /u01/app/oracle/product/10.2.0/db_1/sqlj/lib
    # 10gR2
    loadjava -u scott/tiger -r -v -f -genmissing dbwsclientws.jar dbwsclientdb102.jar
    # 11g
    loadjava -u scott/tiger -r -v -f -genmissing dbwsclientws.jar dbwsclientdb11.jar

导入完成后写如下SQL
CREATE OR REPLACE FUNCTION get_city_from_zipcode (ssid  IN  INTEGER,ssname IN VARCHAR2)
  RETURN VARCHAR2
AS
  l_service  UTL_DBWS.service;
  l_call     UTL_DBWS.call;
  l_result   ANYDATA;
  
  l_wsdl_url         VARCHAR2(32767);
  l_namespace        VARCHAR2(32767);
  l_service_qname    UTL_DBWS.qname;
  l_port_qname       UTL_DBWS.qname;
  l_operation_qname  UTL_DBWS.qname;
  l_input_params     UTL_DBWS.anydata_list;
BEGIN
  l_wsdl_url        := 'http://localhost:8888/axis/services/OracleSay?wsdl';
  l_namespace       := 'http://localhost:8888/axis/services/OracleSay';

  l_service_qname   := UTL_DBWS.to_qname(l_namespace, 'OracleSayService');
  l_port_qname      := UTL_DBWS.to_qname(l_namespace, 'OracleSay');
  l_operation_qname := UTL_DBWS.to_qname(l_namespace, 'test');

  l_service := UTL_DBWS.create_service (
    wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),
    service_name           => l_service_qname);

  l_call := UTL_DBWS.create_call (
    service_handle => l_service,
    port_name      => l_port_qname,
    operation_name => l_operation_qname);

  l_input_params(0) := ANYDATA.CONVERTNUMBER(ssid);
  l_input_params(1) := ANYdATA.CONVERTVARCHAR2(ssname);
  l_result := UTL_DBWS.invoke ( 
    call_handle  => l_call,
    input_params => l_input_params);

  UTL_DBWS.release_call (call_handle => l_call);
  UTL_DBWS.release_service (service_handle => l_service);

  RETURN ANYDATA.AccessVarchar2(l_result);
END;

关于上面一些方法的含意可以看这里:
http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14258/u_dbws.htm#i1001229
接下来是server端,使用tomcat6+axis1.4实现,activation.jar,mail.jar,xerces.jar放到tomcat的lib下,建一个web项目然后把axis包中webapps\axis下的东西拷到WebRoot下。
package gjs;

public class OracleSay {
	public String test(int id,String name){
		return "you id is:"+id+" "+"you name is:"+name+"";
	}
}

发布服务:
写一个deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <service name="OracleSay" provider="java:RPC">
  <parameter name="allowedMethods" value="test"/>
  <parameter name="className" value="gjs.OracleSay"/>
 </service>
</deployment>

axis.jar里有org.apache.axis.client.AdminClient,run它带参数-lhttp://localhost:8888/axis/services/ src/deploy.wsdd
会在WEB-INF下生成一个server-config.wsdd,如果已经有这个的就直接在
server-config.wsdd中加入:
<service name="OracleSay" provider="java:RPC">
  <parameter name="allowedMethods" value="test"/>
  <parameter name="className" value="gjs.OracleSay"/>
</service>
想看生成的wsdl在浏览器里http://localhost:8888/axis/services/OracleSay?wsdl
生成:
<wsdl:definitions targetNamespace="http://localhost:8888/axis/services/OracleSay">

<!--
WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)
-->
<wsdl:message name="testResponse">
<wsdl:part name="testReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="testRequest">
<wsdl:part name="id" type="xsd:int"/>
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="OracleSay">
<wsdl:operation name="test" parameterOrder="id name">
<wsdl:input message="impl:testRequest" name="testRequest"/>
<wsdl:output message="impl:testResponse" name="testResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="OracleSaySoapBinding" type="impl:OracleSay">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="test">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="testRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://gjs" use="encoded"/>
</wsdl:input>
<wsdl:output name="testResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8888/axis/services/OracleSay" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="OracleSayService">
<wsdl:port binding="impl:OracleSaySoapBinding" name="OracleSay">
<wsdlsoap:address location="http://localhost:8888/axis/services/OracleSay"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

用java写个client测试:
	public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
		String endPoint="http://localhost:8888/axis/services/OracleSay";
		Service service=new Service();
		Call call=null;
		call=(Call)service.createCall();
		call.setOperationName(new QName(endPoint,"test"));
		call.setTargetEndpointAddress(new java.net.URL(endPoint));
		String str = (String) call.invoke(new Object[]{182,"李世民"});
		System.out.println(str);

	}

输出:you id is:182 you name is:李世民
oracle调用:
SELECT get_city_from_zipcode(22,'lui') FROM dual;

输出:you id is:22 you name is:lui
分享到:
评论

相关推荐

    OracleEBS-WebService开发笔记.pdf

    ### OracleEBS-WebService开发笔记知识点总结 #### 一、概述 **OracleEBS-WebService开发笔记** 是一份详尽的文档,旨在介绍如何利用 WebService 技术进行 Oracle E-Business Suite (EBS) 的集成开发。该文档由 ...

    将应用部署在weblogic中于axis2冲突的问题及解决方案

    "将应用部署在Weblogic中与Axis2冲突的问题及解决方案" 问题描述 在将应用部署到Weblogic Server 10.3时,出现了一个错误,抛出ClassCastException异常,具体错误信息为: `java.lang.ClassCastException: ...

    使用axis2与ssh整合开发webService文档与源码

    当我们谈论“使用Axis2与SSH整合开发WebService”时,我们实际上是在讨论如何将Apache Axis2,一个强大的Java Web服务框架,与Spring(S)、Hibernate(H)和Struts(S)这三大流行开源框架相结合,来构建高效、可...

    axis2开发Web Services入门

    可以从 Oracle 官方网站获取。 - 设置环境变量 `JAVA_HOME` 指向 JDK 的安装目录。 - 配置 `PATH` 变量,添加 `%JAVA_HOME%\bin`。 **Tomcat** - 下载 Apache Tomcat 最新稳定版。可以从 Apache 官方网站获取。 - ...

    使用CXF发布WebService

    描述中的“axis连接webservice所用的jar包”提到了Apache Axis,这是一个早期的Web服务客户端工具,用于调用CXF发布的Web服务。虽然CXF也可以作为客户端,但在这里可能是为了演示或兼容性的目的,使用Axis来消费服务...

    WebService所需Jar包

    例如,Apache Axis和CXF提供了代码生成工具,可以从WSDL文件自动生成服务端和客户端代码,而GlassFish Metro是Oracle提供的一个全功能的JAX-WS实现。 在JavaWeb项目中,将这些Jar包整合进类路径,开发者就可以轻松...

    Axis2.0 Demo

    【标签】"Axis2.0 webservice j2ee" 指出本示例主要涉及以下技术点: - **Axis2.0**:Apache Axis2是Web服务栈的一个实现,它提供了高性能和灵活性,支持多种协议如SOAP、REST,并且能够与其他Java EE组件集成,如...

    四种方式调用webservice

    - **Axis2调用过程**:通过 Axis2 的命令行工具或编程接口,可以生成与WebService相匹配的Java客户端代码。一旦生成,就可以实例化客户端,配置必要的参数,然后调用WebService的方法。 4. **WebLogic调用** - **...

    AXIS2 _.docx

    ### 使用Axis2进行WebService开发、部署与调用详解 #### 一、Axis2简介 Axis2是Apache组织下的一个开源项目,它是一个基于Java的WebService框架。Axis2提供了丰富的功能来构建、部署以及调用WebService,它支持...

    webservice

    1. **Axis2**:作为 Apache 的一个开源项目,Axis2 提供了一种灵活的方式来构建和部署 Webservice。它支持 SOAP 和 REST 风格的服务,并且具有丰富的社区支持。 2. **Spring WS**:Spring 框架的一部分,Spring WS...

    金蝶 EAS 凭证引入 “webservice 接口”说明

    - 发布EASLogin客户端需要通过下载其WSDL地址,并利用第三方包(如Apache Axis)制作bat文件来发布客户端代码。 - 登录所需参数包括用户名、密码、系统名称、数据中心、语言、数据库类型、验证方式等。 - 参数语言...

    webserviceyuoracle

    常见的开发框架有Apache CXF、 Axis2、Spring-WS等,这些框架提供了创建、发布和消费WebService的便利。 2. **JAXP、JAXM和相关协议**: - JAXP (Java API for XML Processing) 是用于处理XML文档的Java API,包括...

    Odi11g数据存储发布成webservice

    在本案例中,Axis2用于发布和管理WebService。 3. **部署Axis2至Apache Tomcat**: - 将Axis2部署到Apache Tomcat中,确保Web Service能够被正确地发布。部署完成后,可以通过浏览器访问`...

    基于WebService的多源数据库数据访问方法.pdf

    "基于WebService的多源数据库数据访问方法" 本文旨在介绍基于WebService的多源数据库数据访问方法,旨在提供一种可以由数据需求方自定义其所要获取数据的内容及得到数据后自定义数据的呈现方式的数据访问方式...Axis2

    webservice所需lib开发包

    标题中的"webservice所需lib开发包"指的是为了进行Web服务开发,开发者需要的一系列Java库文件。这些库文件包含了实现Web服务功能的各种API和工具,它们是开发者构建Web服务客户端或服务端应用程序的基础。 描述中...

    四种方式调用webservice.doc

    WebLogic Server是Oracle提供的一款企业级应用服务器,支持部署和调用Web Service。在WebLogic环境中,可以通过管理控制台或WLST(WebLogic Scripting Tool)添加Web Service消费者,配置服务端点,然后在应用程序中...

Global site tag (gtag.js) - Google Analytics