Jersey调用Webservice Restful接口

来源:互联网 发布:Affinity photo mac 编辑:程序博客网 时间:2024/06/08 19:20

Jersey调用Restful接口

接口定义:
这里写图片描述

接口调用

import com.neefull.dataexchange.util.StrUtils;
import com.neefull.dataexchange.util.WebServiceUtils;
import com.neefull.dataexchange.util.XmlUtils;
import com.neefull.dataexchange.ws.model.SupervisionRequestModel;
import com.neefull.dataexchange.ws.model.SupervisionResponseModel;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

/**
* Created by JacksonFeng on 2017/7/19.
*/
public class WadlTest {

public static void main(String[] args) throws Exception {    // 创建默认的httpClient实例.    SupervisionRequestModel model = new SupervisionRequestModel();    model.setWS_USERNAME("syjadmin");    model.setWS_PASSWORD("nifu@123");    model.setENTY_TYPE("22");    model.setETPS_NAME("街道街道街道街道");    String datas = XmlUtils.model2Xml(model, SupervisionRequestModel.class, "PUNISHMENT");    datas = StrUtils.regexReplace(datas, "__", "_");    /*************************/    javax.ws.rs.client.Client client1 = ClientBuilder.newClient();    WebTarget target = client1.target("http://${ip}/manainf/services/businessService/punishmentInfo");    Response response = target.queryParam("${paramName}", datas).request().post(Entity.entity(datas, MediaType.APPLICATION_FORM_URLENCODED_TYPE));//或者json,具体参考接口定义的可接受的参数值类型。    System.out.println(ToStringBuilder.reflectionToString(response, ToStringStyle.MULTI_LINE_STYLE));//打印Response    InputStream is = (InputStream) response.getEntity();    int len = 0;    byte[] b = new byte[2048];    ByteArrayOutputStream bos = new ByteArrayOutputStream();    while ((len = is.read(b, 0, 2048)) != -1) {        bos.write(b, 0, len);    }    String rst = new String(bos.toByteArray(), "UTF-8");    System.out.println("Returned:" + rst);    SupervisionResponseModel responseModel = XmlUtils.xml2OneModel(rst, SupervisionResponseModel.class, "RESPONSE");    System.out.println(ToStringBuilder.reflectionToString(responseModel, ToStringStyle.MULTI_LINE_STYLE));    System.out.println("---------------------------------------------");    String rr  = WebServiceUtils.invokeWADL(new WebServiceUtils.WebserviceConfig("http://10.85.21.129/manainf/services/businessService/punishmentInfo", "info", MediaType.APPLICATION_FORM_URLENCODED_TYPE, datas));    SupervisionResponseModel rm = XmlUtils.xml2OneModel(rr, SupervisionResponseModel.class, "RESPONSE");    System.out.println(ToStringBuilder.reflectionToString(responseModel, ToStringStyle.MULTI_LINE_STYLE));}

}

使用到自定义工具类

  • XmlUtils
  • 代码:
    import com.neefull.dataexchange.ws.datadownload.SaxXmlReaderHandler;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.Xpp3Driver;import org.apache.log4j.Logger;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import java.io.ByteArrayInputStream;public class XmlUtils { public static T xml2OneModel(String xmlContent, Class clazz, String typeAliasName) throws Exception { SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); SaxXmlReaderHandler saxXmlReaderHandler = new SaxXmlReaderHandler(clazz, typeAliasName); saxParser.parse(new ByteArrayInputStream(xmlContent.getBytes("UTF-8")), saxXmlReaderHandler); return (T) saxXmlReaderHandler.getObj(); } /** * 单实例 model转换为 xml字符串 * * @param clazz * @param typeAliasName * @return */ public static String model2Xml(Object data, Class clazz, String typeAliasName{ XStream xStream = new XStream(new Xpp3Driver()); xStream.alias(typeAliasName, clazz); return decorateHeader(xStream.toXML(data)); } static String decorateHeader(String source) { StringBuilder sb = new StringBuilder(); if (null == source) { source = ""; } sb.append("####测试结果 :
    org.apache.cxf.jaxrs.impl.ResponseImpl@640e0e2f[  status=200  entity=sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@50a4b7af  entityAnnotations=  metadata={Accept-Ranges=[bytes], Content-Length=[140], content-type=[application/xml], Date=[Tue, 25 Jul 2017 04:05:05 GMT], Content-Type=[application/xml]}  outMessage={http.connection.address=org.apache.cxf.transport.http.Address@6e176b85, org.apache.cxf.invocation.context={ResponseContext={}, RequestContext={response.class=class javax.ws.rs.core.Response, org.apache.cxf.request.method=POST, javax.ws.rs.core.Configuration=org.apache.cxf.jaxrs.impl.ConfigurationImpl@4394213a, org.apache.cxf.request.uri=。。。。}  entityClosed=false  entityBufferred=false  lastEntity=]

    Returned:

    <?xml version="1.0" encoding="UTF-8"?><RESPONSE><STATUS>-1</STATUS><MESSAGE>操作失败,接口参数格式不合法!</MESSAGE></RESPONSE> com.neefull.dataexchange.ws.model.SupervisionResponseModel@7193802f[   status=-1   message=操作失败,接口参数格式不合法! ]
    原创粉丝点击