`

Java Webservice调用总结

阅读更多
一、调用ASP.NET发布的WebService服务
以下是SOAP1.2请求事例
    POST /user/yfengine.asmx HTTP/1.1
    Host: oserver.palm-la.com
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: length
    <?xml version="1.0" encoding="utf-8"?>
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
          <soap12:Body>
            <Login xmlns="Loginnames">
                  <userId>string</userId>
                  <password>string</password>
            </Login>
          </soap12:Body>
    </soap12:Envelope>
 
1、方式一:通过AXIS调用
String serviceEpr = "http://127.0.0.1/rightproject/WebServices/RightService.asmx";
public String callWebServiceByAixs(String userId, String password, String serviceEpr){
              
        try {
               Service service = new Service();
               Call call = (Call)service.createCall();
               call.setTargetEndpointAddress(new java.net.URL(serviceEpr));
               //服务名
               call.setOperationName(new QName("http://tempuri.org/""Login"));   
               //定义入口参数和参数类型
               call.addParameter(new QName("http://tempuri.org/""userId"),XMLType.XSD_STRING, ParameterMode.IN);
               call.addParameter(new QName("http://tempuri.org/""password"),XMLType.XSD_STRING, ParameterMode.IN);
               call.setUseSOAPAction(true);
               //Action地址
               call.setSOAPActionURI("http://tempuri.org/Login");
               //定义返回值类型
               call.setReturnType(XMLType.XSD_INT);
               
               //调用服务获取返回值    
               String result = String.valueOf(call.invoke(new Object[]{userId, password}));
               System.out.println("返回值 : " + result);
               return result;
              } catch (ServiceException e) {
               e.printStackTrace();
              } catch (RemoteException e) {
               e.printStackTrace();
              } catch (MalformedURLException e) {
               e.printStackTrace();
              }
        
        return null;
    }
 
2、方式二: 通过HttpClient调用webservice
soapRequest 为以下Xml,将请求的入口参数输入
<?xml version="1.0" encoding="utf-8"?>
        <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
          <soap12:Body>
            <Login xmlns="Loginnames">
                  <userId>张氏</userId>
                  <password>123456</password>
            </Login>
          </soap12:Body>
    </soap12:Envelope>
String serviceEpr = "http://127.0.0.1/rightproject/WebServices/RightService.asmx";
String contentType = "application/soap+xml; charset=utf-8";
public static String callWebService(String soapRequest, String serviceEpr, String contentType){
        
        PostMethod postMethod = new PostMethod(serviceEpr);
        //设置POST方法请求超时
        postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
        
        try {
            
            byte[] b = soapRequest.getBytes("utf-8");
            InputStream inputStream = new ByteArrayInputStream(b, 0, b.length);
            RequestEntity re = new InputStreamRequestEntity(inputStream, b.length, contentType);
            postMethod.setRequestEntity(re);
            
            HttpClient httpClient = new HttpClient();
            HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams(); 
            // 设置连接超时时间(单位毫秒)
            managerParams.setConnectionTimeout(30000);
            // 设置读数据超时时间(单位毫秒)
            managerParams.setSoTimeout(600000); 
            int statusCode = httpClient.executeMethod(postMethod);
            if (statusCode != HttpStatus.SC_OK)  
                throw new IllegalStateException("调用webservice错误 : " + postMethod.getStatusLine()); 
            
            String soapRequestData =  postMethod.getResponseBodyAsString();
            inputStream.close();
            return soapRequestData;
        } catch (UnsupportedEncodingException e) {
            return "errorMessage : " + e.getMessage();
        } catch (HttpException e) {
            return "errorMessage : " + e.getMessage();
        } catch (IOException e) {
            return "errorMessage : " + e.getMessage();
        }finally{
             postMethod.releaseConnection(); 
        }
    }
 

二、调用其他WebService服务
1、方式一:通过AIXS2调用
serviceEpr:服务地址
nameSpace:服务命名空间
methodName:服务名称
Object[] args = new Object[]{"请求的数据"};
 
DataHandler dataHandler = new DataHandler(new FileDataSource("文件路径"));
传文件的话,"请求的数据"可以用DataHandler对象,但是WebService服务需提供相应的处理即:
InputStream inputStream = DataHandler.getInputStream();
然后将inputStream写入文件即可。还可以将文件读取为二进制流进行传递。
public static String callWebService(String serviceEpr, String nameSpace, Object[] args, String methodName){
        try{
        
            RPCServiceClient serviceClient = new RPCServiceClient();
            Options options = serviceClient.getOptions();
            EndpointReference targetEPR = new EndpointReference(serviceEpr);
            options.setTo(targetEPR);
            
            //===========可以解决多次调用webservice后的连接超时异常========
            options.setManageSession(true);   
            options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true);   
           
            //设置超时
            options.setTimeOutInMilliSeconds(60000L);
            // 设定操作的名称
            QName opQName = new QName(nameSpace, methodName);
            // 设定返回值
            
// 操作需要传入的参数已经在参数中给定,这里直接传入方法中调用
            Class[] opReturnType = new Class[] { String[].class };
            //请求并得到返回值
            Object[] response = serviceClient.invokeBlocking(opQName, args, opReturnType);
            String sResult = ((String[]) response[0])[0];
            //==========可以解决多次调用webservice后的连接超时异常=======
            serviceClient.cleanupTransport(); 
            return sResult;
        
        }catch(AxisFault af){
            return af.getMessage();
        }
    }
    
2、方式二:
serviceEpr:服务器地址
nameSpace:服务命名空间
methodName:服务名称
private static void callWebService(String serviceEpr, String nameSpace, String methodName) {
        try {
            EndpointReference endpointReference = new EndpointReference(serviceEpr);
            // 创建一个OMFactory,下面的namespace、方法与参数均需由它创建
            OMFactory factory = OMAbstractFactory.getOMFactory();
            // 创建命名空间
            OMNamespace namespace = factory.createOMNamespace(nameSpace, "urn");
            // 参数对数
            OMElement nameElement = factory.createOMElement("arg0"null);
            nameElement.addChild(factory.createOMText(nameElement, "北京"));
            // 创建一个method对象
            OMElement method = factory.createOMElement(methodName, namespace);
            method.addChild(nameElement);
            Options options = new Options();
            // SOAPACTION
            
//options.setAction("sayHi");
            options.setTo(endpointReference);
            
            options.setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI); 
            ServiceClient sender = new ServiceClient();
            sender.setOptions(options);
            // 请求并得到结果
            OMElement result = sender.sendReceive(method);
            System.out.println(result.toString());
        } catch (AxisFault ex) {
            ex.printStackTrace();
        }
    }
    
3、方式三:通过CXF调用
serviceEpr:服务器地址
nameSpace:服务命名空间
methodName:服务名称
public static String callWebService(String serviceEpr, String nameSpace, String methodName){
        
        JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
        Client client = clientFactory.createClient(serviceEpr);
        Object[] resp = client.invoke(methodName, new Object[]{"请求的内容"});
        System.out.println(resp[0]);
    }
    
    //传文件,将文件读取为二进制流进行传递,“请求内容”则为二进制流
    private byte[] getContent(String filePath) throws IOException{  
        
     FileInputStream inputStream = new FileInputStream(filePath);    
     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024);  
        System.out.println("bytes available: " + inputStream.available());  
  
        byte[] b = new byte[1024];        
        int size = 0;  
          
        while((size = inputStream.read(b)) != -1)   
            outputStream.write(b, 0, size);   
          
     inputStream.close();   
        byte[] bytes = outputStream.toByteArray();  
        outputStream.close();
 

        return bytes;  
    } 
    
分享到:
评论

相关推荐

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    java调用webservice.zip

    java调用webservicejava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava...

    java 调用 odi webservice

    ODI(Oracle Data Integrator)是一种数据集成平台,提供了webservice接口,允许用户通过webservice调用ODI方案执行,从而实现数据的同步。 在本文档中,我们将通过 Java 应用程序调用 ODI webservice,实现数据的...

    asp.net通过WebService调用Java接口全过程

    总结来说,ASP.NET通过WebService调用Java接口的过程主要包括:部署Java WebService、在.NET项目中添加Web引用、配置项目设置、在代码中实例化并调用服务方法,以及理解背后涉及的SOAP和RMI通信机制。这个过程允许...

    java调用json参数的webservice

    在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...

    delphi调用Java webservice实例

    标题 "Delphi调用Java WebService实例" 涉及的是在Delphi编程环境中如何与Java WebService进行交互的技术。Delphi是一款强大的Windows应用程序开发工具,而Java WebService则是一种基于标准的,跨平台的远程调用技术...

    java调用webservice接口案例,service调用webservice接口

    java调用webservice接口案例,精简,service调用webservice接口案例;不用生成一堆代码,逻辑清晰

    PB调用JAVA WEBSERVICE实例

    总结起来,这个实例旨在展示如何克服跨平台调用的障碍,利用PowerBuilder调用Java Web服务,从而实现不同技术栈间的集成。了解并实践这个过程对于提升开发者在企业级应用开发中的技能是非常有价值的。

    Java Webservice调用方式详解

    Java WebService调用方式详解主要涉及两种方法:Axis和SOAP。这两种方式都是用来与Web服务进行交互,调用远程服务的方法。以下将详细介绍这两种方法。 1. Axis方式调用: Axis是Apache的一个开源项目,它提供了一...

    java android 调用webservice

    总结,Java Android调用Webservice涉及到网络请求、数据传输、解析和安全等多个环节,开发者需要了解HTTP协议,选择合适的Web服务类型,以及掌握相应的数据解析技术。通过合理利用第三方库和遵循最佳实践,可以提高...

    .net调用java WebService

    ### .NET调用Java WebService的关键知识点 #### 一、背景与原理介绍 在实际的软件开发过程中,不同技术栈之间的交互变得越来越普遍。对于.NET应用程序来说,有时需要调用由Java开发的WebService。这种跨平台的服务...

    Java webservice cxf客户端调用demo和服务端

    Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...

    java+soap+webservice 调用模拟

    通过阅读提供的"java-soap-webservice"文档,你可以进一步了解具体的实现步骤,包括如何设置项目、配置JAX-WS、生成客户端代码、编写调用服务的代码,以及如何解析响应。实践中,不断动手操作和调试是掌握这一技术的...

    JAVA调用WEBSERVICE接口

    JAVA调用WEBSERVICE接口

    JAVA 调用SAP SOAP webservice.docx

    JAVA 调用 SAP SOAP webservice 详解 在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP...

    c#调用Java webService的专题(一)

    本文将深入探讨如何使用C#调用Java WebService,这是实现.NET与Java平台间互操作性的一个重要方式。我们将首先理解WebService的基本概念,然后详细讲解C#中如何通过.NET Framework的SOAP客户端代理类来调用Java ...

    JAVA调用webservice并解析xml

    总结,调用Java中的Web服务并解析XML涉及到了Web服务的基础概念、Java的Web服务客户端创建、XML解析技术以及实际的调用与响应处理。熟练掌握这些知识点,能够帮助开发者有效地集成和利用各种Web服务资源。

    java调用C++ webservice

    本话题主要探讨如何使用Java调用由C++实现的Web服务(Webservice)。在给出的描述中,提到了通过WSDL(Web Services Description Language)文件来实现这一目标。以下是关于这个主题的详细知识点: 1. **Web服务...

    java 调用 webService工具类

    在Java中,大多数传统的WebService调用使用SOAP,这是一个基于XML的消息传递协议。SOAP消息封装在HTTP请求中,使得跨平台的数据交换成为可能。Java中的JAX-WS(Java API for XML Web Services)框架是处理SOAP ...

    超简单的webservice调用

    【标题】"超简单的webservice调用"涉及的是在Java环境下使用Hutool库进行Web Service接口调用的基础知识。Web Service是一种基于网络的、松散耦合的软件组件交互方式,它允许不同系统间的应用共享数据和服务。在这个...

Global site tag (gtag.js) - Google Analytics