关于java连接webService的总结

来源:互联网 发布:数据库建表工具 编辑:程序博客网 时间:2024/06/06 22:52

今天项目用到的webserivice我这里总结几个连接的方式。

一、

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

//生成documnet对象

 Document _document = DocumentHelper.createDocument();

//添加根节点
    Element _element = _document.addElement("root");

//根节点中添加内容
     _element.addElement("APPLY_COMPANY").setText(((String)dynaBn.get("APPLY_COMPANY")==""?"":(String)dynaBn.get("APPLY_COMPANY")));

//创建实例

JaxWsDynamicClientFactory dcf =JaxWsDynamicClientFactory.newInstance();

//根据地址创建客户端
      Client client =dcf.createClient("WEBSERVICEURL");

//调用方法
      Object[] o = client.invoke("addJob", new Object[]{_document});

二、

1.通过eclipse 创建web Service Client :Service definintion里面输入你的webservice地址,然后下一步 选择要创建在哪个项目的目录下。

2.之前的方法是xml格式,本方法是通过设定好的对象来传输(bean在你刚才生成的目录下)

 

import org.apache.axis.client.Service;

import java.net.URL;

 

//OaJob是我需要的Bean类型 (是通过本文 二、1.  生成的 )

OaJob oj = new OaJob();
    oj.setApplyCompany(((String) dynaBn.get("APPLY_COMPANY") == "" ? "": (String) dynaBn.get("APPLY_COMPANY")));

URL url = new URL("WEBSERVICEURL");
     Service service = new Service();

//JobService对象(是通过本文 二、1.  生成的 ),你可以打开这个service看一下都有哪些方法。
     JobServiceSoapBindingStub JSSBS = new JobServiceSoapBindingStub(
       url, service);

//返回的结果类型和addJob方法是我wsdl的需求,不同的webservice也是不同的,Bean同理。
     WSResult result = JSSBS.addJob(oj);

 

 

// 获取流
       InputStream inputS = fileService.getContent(file[0] .getId());
       ByteArrayOutputStream outStream = new ByteArrayOutputStream();
       byte[] data = new byte[1024];
       int count = -1;
       while ((count = inputS.read(data, 0, 1024)) != -1)
        outStream.write(data, 0, count);
       
       String str=DECODE(new String(outStream.toByteArray(),"UTF-8"));

      // 把简历转换成String存入Bean中
       oj.setResume(str);
       inputS.close();

我在开发过程用由于接口需要byte[]类型转换成String的数据,连接接口时遇到了异常,

java.lang.IllegalArgumentException: The char '0x11' after '邢' is not a valid XML character.

问题的原因是由于转换出现了多余的符号,把这些符号过滤掉就可以了,然后在本类中单独写一个方法解决了此问题

public static String DECODE(String in) {
  StringBuffer out = new StringBuffer(); // Used to hold the output.
  char current; // Used to reference the current character.
  if (in == null || ("".equals(in)))
   return ""; // vacancy test.
  for (int i = 0; i < in.length(); i++) {
   current = in.charAt(i);
   if (current == 0x1e) {
    System.out.println("过滤错误代码 current:" + current);
   } else if ((current == 0x9) || (current == 0xA) || (current == 0xD)
     || ((current > 0x20) && (current <= 0xD7FF))
     || ((current >= 0xE000) && (current <= 0xFFFD))
     || ((current >= 0x10000) && (current <= 0x10FFFF))
     || (current < 0x0))
    out.append(current);
  }
  return out.toString().trim();
 }
0 0
原创粉丝点击