精华内容
下载资源
问答
  • JAVA调用Webservice接口Demo

    热门讨论 2013-05-09 14:55:13
    JAVA调用Webservice接口Demo 直接上代码,下载下来可直接运行看到效果 1,IP查询 2,根据省份查城市
  • Java调用WebService接口

    2013-05-28 10:56:22
    服务端(为客户端提供Webservice接口):  使用工具:myeclipse-8.6.1-win32,apache-tomcat-7.0.11  开发步骤:1.创建工程  File->New->Web Service Project,弹出Web Service Project窗口,需要...

    服务端(为客户端提供Webservice接口):

      使用工具:myeclipse-8.6.1-win32,apache-tomcat-7.0.11

      开发步骤:1.创建工程

           File->New->Web Service Project,弹出Web Service Project窗口,需要填写Project Name(例子是Demo),选择XFire,然后一路next,直到完成。

           创建完成后,打开生成的web.xml文件,可以看到,XFire已经配置好了。

     

    View Code 
     <?xml version="1.0" encoding="UTF-8"?>
     <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
       <servlet>
         <servlet-name>XFireServlet</servlet-name>
         <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
         <load-on-startup>0</load-on-startup>
       </servlet>
       <servlet-mapping>
         <servlet-name>XFireServlet</servlet-name>
         <url-pattern>/services/*</url-pattern>
       </servlet-mapping>
       <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
       </welcome-file-list>
     </web-app>

     2.创建WebService服务

     

            选择Toolbars上的New Web Service,弹出New Web Service窗口,选择Strategy:Create web service from Java class(Bottom-up scenario)并勾选下面的Create new Java bean,然后Next>,在Web service name中填写MyService,在Java package栏点击New...弹出窗口中Name:中填com.demo.service,然后点Finish。

            完成后,生成了一个Service的配置services.xml

     

    View Code 
     <?xml version="1.0" encoding="UTF-8"?>
     <beans xmlns="http://xfire.codehaus.org/config/1.0">
     
         <service>
             <name>IMyService</name>
             <serviceClass>com.demo.service.IIMyService</serviceClass>
             <implementationClass>
                 com.demo.service.IMyServiceImpl
             </implementationClass>
             <style>wrapped</style>
             <use>literal</use>
             <scope>application</scope>
         </service></beans>

     生成了接口和默认实现:

     

    View Code 
     package com.demo.service;
     //Generated by MyEclipse
     
     public interface IIMyService {
         
         public String example(String message);
         
     }

     

    View Code 
     package com.demo.service;
     //Generated by MyEclipse
     
     public class IMyServiceImpl implements IIMyService {
         
         public String example(String message) {
             return message;
         }
         
     }

     服务端代码生成完毕。

      测试服务端:1.前提:配置Tomcat服务器,并完成WebService服务端的部署,然后启动Tomcat。

            2.选择Toolbars上的Launch SOAP Web Service Explorer,Web Services Explorer窗口右侧WSDL Page,输入网址:http://localhost:8080/Demo/services/MyService?wsdl,显示如下图

    3.双击examlpe,输入hello,下面会显示out(string):hello,测试通过。

    客户端(调用服务端提供的WebService接口方法):

      使用工具:eclipse

      需要引入如下包:commons-codec-1.2.jar、commons-httpclient-3.0.-rc2.jar、jdom.jar、xfire-all-1.2.6.jar、wsdl4j-1.5.1.jar、commons-logging-1.0.4.jar。

      开发步骤:1.创建工程

           File->New->Java Project->Project name:Demo,一路Next>,最后Finish,然后新建包com.demo.client,包中建立2个文件,一个是服务端接口文件(直接复制粘贴过来)IMyService.java,一个是测试文件Test.java,其代码如下:

    View Code 
     package com.demo.client;
     import org.codehaus.xfire.client.XFireProxyFactory;
     import org.codehaus.xfire.service.Service;
     import org.codehaus.xfire.service.binding.ObjectServiceFactory;
     
     public class Test {
         /**
          * @param args
     */
         public static void main(String[] args) {
             // TODO Auto-generated method stub
             String serviceUrl = "http://localhost:8080/Demo/services/MyService";
             Service serviceModel = new ObjectServiceFactory().create(IMyService.class, null, "http://localhost:8080/Demo/services/MyService?wsdl", null);
             XFireProxyFactory serviceFactory = new XFireProxyFactory();
             try{
                 IMyService service = (IMyService)serviceFactory.create(serviceModel,serviceUrl);
                 String hello = service.example("hello");
                 System.out.println(hello);
             }catch(Exception e){
                 e.printStackTrace();
             }
         }
     }

     

    注 :图片略,但不影响学习

    转自http://www.cnblogs.com/simle/archive/2011/10/31/2230091.html

    展开全文
  • 使用SOAPMessage进行WebService接口调用需要自己构造请求参数,需要按照一定的顺序,按照一定的层级关系添加组装成xml格式报文。一下是示例代码。 使用demo代码 package cn.hewie.webService.client; import ...

    使用SOAPMessage进行WebService接口调用需要自己构造请求参数,需要按照一定的顺序,按照一定的层级关系添加组装成xml格式报文。一下是示例代码。

    使用demo代码

    package cn.hewie.webService.client;
    
    import com.sun.xml.internal.ws.client.BindingProviderProperties;
    import com.sun.xml.internal.ws.developer.JAXWSProperties;
    import org.w3c.dom.Document;
    
    import javax.xml.namespace.QName;
    import javax.xml.soap.*;
    import javax.xml.ws.Dispatch;
    import java.net.URL;
    import java.util.HashMap;
    
    public class SoapRequest {
        public void execute() throws Exception {
            String nameSpace = "http://tempuri.org/";
            String wsdlUrl = "https://infotrack.naqelexpress.com/NaqelAPIServices/NaqelAPIDemo/5.0/XMLShippingService.asmx?WSDL";
            String serviceName = "XMLShippingService";
            String portName = "XMLShippingServiceSoap12";
            String elementName = "IsWaybillExists";
            String responseName = "IsWaybillExistsResponse";
    
            // 1.create service
            URL url = new URL(wsdlUrl);
            QName sname = new QName(nameSpace, serviceName);
            javax.xml.ws.Service service = javax.xml.ws.Service.create(url, sname);
    
            // 2.create Dispatch object
            Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(nameSpace, portName), SOAPMessage.class, javax.xml.ws.Service.Mode.MESSAGE);
    
            // 3.create SOAPMessage
            SOAPMessage msg = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();
            msg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "UTF-8");
    
            // 3.1 create SOAPEnvelope
            SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
            envelope.setPrefix("soap");
            envelope.addNamespaceDeclaration("tem", nameSpace);
            envelope.removeAttribute("xmlns:env");
    
            // 3.2 create SOAPHeader
            SOAPHeader header = envelope.getHeader();
            if (null == header) {
                header = envelope.addHeader();
            }
            header.setPrefix("soap");
    
            // 3.3 create SOAPBody
            SOAPBody body = envelope.getBody();
            body.setPrefix("soap");
            SOAPBodyElement clientInfo = body.addBodyElement(new QName(nameSpace, "ClientInfo", "tem"));
            clientInfo.addChildElement(new QName(nameSpace, "ClientID", "tem")).setValue("1");
            clientInfo.addChildElement(new QName(nameSpace, "Password", "tem")).setValue("111");
            clientInfo.addChildElement(new QName(nameSpace, "Version", "tem")).setValue("1.0");
            SOAPBodyElement ele = body.addBodyElement(new QName(nameSpace, elementName, "tem"));
            ele.addChildElement(clientInfo);
            ele.addChildElement(new QName(nameSpace, "WaybillNo", "tem")).setValue("111");
            // ...
    
            msg.writeTo(System.out); // print xml
            System.out.println("\n----------");
    
            // set timeout
            dispatch.getRequestContext().put(BindingProviderProperties.CONNECT_TIMEOUT, 2000);
            dispatch.getRequestContext().put(JAXWSProperties.REQUEST_TIMEOUT, 2000);
            SOAPMessage response = dispatch.invoke(msg);
    
            // 4. get response and transfer to dom object
            Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
            String result = doc.getElementsByTagName(responseName).item(0).getTextContent();
            System.out.println(result);
        }
    
    }
    
    

    上例中一些变量值的获取肯定让人有点摸不着头脑,我们可以通过wsdl文档获取到其中的参数变量的值。

    参数获取途径

    以下是使用soapUI打开的wsdl文档,并发送的一条请求,示例代码中的变量标识如下:
    SOAP参数获取

    样例结果

    调用上述execute方法,样例结果如下:

    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
      <soap:Header/>
      <soap:Body>
        <tem:IsWaybillExists>
          <tem:ClientInfo>
            <tem:ClientID>1</tem:ClientID>
            <tem:Password>111</tem:Password>
            <tem:Version>1.0</tem:Version>
          </tem:ClientInfo>
          <tem:WaybillNo>111</tem:WaybillNo>
        </tem:IsWaybillExists>
      </soap:Body>
    </soap:Envelope>
    ----------
    true
    
    展开全文
  • 上一节使用SOAPMessage调用WebService接口,但是比较麻烦的是参数的拼装需要一个一个add,比较麻烦。此次介绍使用JAXBContent转化Bean与Xml,然后利用http请求(如Okhttp)发送Xml组装的报文。 目标 先看一下请求...

    上一节使用SOAPMessage调用WebService接口,但是比较麻烦的是参数的拼装需要一个一个add,比较麻烦。此次介绍使用JAXBContent转化Bean与Xml,然后利用http请求(如Okhttp)发送Xml组装的报文。
    本文demo代码:JAXBContent转换Bean与Xml

    目标

    先看一下请求与结果:
    WebService请求

    再看一下本demo最终的类结构
    demo类结构

    • bean目录分为request和response,代表的分别是请求和相应。
    • 由于Xml有多层结点,造成Bean也会有多层嵌套。
    • NameSpace和package-info.java定义了命名空间,用于生成Xml和解析Xml。
    • HttpRequest使用Okhttp发送请求。
    • XmlUtil则封装了Bean转化为Xml、Xml转化为Bean两个方法。
    • Test类进行测试。

    1.Bean To Xml

    1.1 转化方法

    Bean To Xml转化方法是XmlUtil中的一个方法。具体方法如下:

    	/**
         * transfer bean to xml
         *
         * @param obj   待转化类对象
         * @param clazz 待转化类
         * @return 转化后的xml字符串
         * @throws JAXBException
         */
        public static String beanToXml(Object obj, java.lang.Class<?> clazz) throws JAXBException {
            String result = null;
            try {
                JAXBContext context = JAXBContext.newInstance(clazz);
                Marshaller marshaller = context.createMarshaller();
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
                marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
                StringWriter writer = new StringWriter();
                marshaller.marshal(obj, writer);
                result = writer.toString();
            } catch (JAXBException e) {
                e.printStackTrace();
                System.out.println("JAXBException happened.");
            }
            return result;
        }
    

    有了转化方法,不代表转化就可以成功了。因为Xml是有一定格式的,转化的格式如何规定呢?这里可以使用@Xml类注解进行规定。

    1.2 @XML类注解

    @XmlRootElement 代表xml根节点
    @XmlType 可以定义xml节点中元素的顺序
    @XmlElement 表名是当前节点下的一个子节点
    @XmlAttribute 表名是当前节点的属性
    有的注解中可以定义name属性,指定其在Xml中的名称;namespace属性,指定其属于某一个命名空间。

    1.3 定义命名空间

    NameSpace中的内容如下

    package cn.hewie.webService.bean.request;
    
    public class NameSpace {
        public static final String BASIC_PREFIX = "soap";
        public static final String BASIC_URI = "http://www.w3.org/2003/05/soap-envelope";
        public static final String TEMP_URI = "http://tempuri.org/";
        public static final String TEMP_PREFIX = "tem";
    }
    

    package-info.java中的内容如下

    @XmlSchema(
            xmlns = {
                    @XmlNs(prefix = NameSpace.BASIC_PREFIX, namespaceURI = NameSpace.BASIC_URI),
                    @XmlNs(prefix = NameSpace.TEMP_PREFIX, namespaceURI = NameSpace.TEMP_URI)
            })
    package cn.hewie.webService.bean.request;
    
    import javax.xml.bind.annotation.XmlNs;
    import javax.xml.bind.annotation.XmlSchema;
    

    1.4 使用注解标识Bean

    有了上述注解和命名空间基础后,就可以使用注解标识Bean了。例如上述请求中,最外层结点定位为RequestEntity对象,可以定义如下:

    import cn.hewie.webService.bean.response.NameSpace;
    
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "Envelope", namespace = NameSpace.BASIC_URI)
    @XmlType(propOrder = {"header", "body"})
    public class RequestEntity {
    
        protected RequestHeader header;
    
        protected RequestBody body;
    
        @XmlElement(name = "Header", namespace = NameSpace.BASIC_URI)
        public RequestHeader getHeader() {
            return header;
        }
    
        public void setHeader(RequestHeader header) {
            this.header = header;
        }
    
        @XmlElement(name = "Body", namespace = NameSpace.BASIC_URI)
        public RequestBody getBody() {
            return body;
        }
    
        public void setBody(RequestBody body) {
            this.body = body;
        }
    }
    

    这样就标识了最外层的Envelope,还指定了其含有子节点header和body,并分别指定了命名空间。
    由于header结点为空,我们可以直接创建一个对象即可。

    package cn.hewie.webService.bean.request;
    
    public class RequestHeader {
    }
    

    主要还是body节点,其中又包含了一个对象。

    package cn.hewie.webService.bean.request;
    
    
    import javax.xml.bind.annotation.XmlElement;
    
    public class RequestBody {
    
        private IsWaybillExistsRequest isWaybillExistsRequest;
    
        @XmlElement(name = "IsWaybillExists", namespace = NameSpace.TEMP_URI)
        public IsWaybillExistsRequest getIsWaybillExistsRequest() {
            return isWaybillExistsRequest;
        }
    
        public void setIsWaybillExistsRequest(IsWaybillExistsRequest isWaybillExistsRequest) {
            this.isWaybillExistsRequest = isWaybillExistsRequest;
        }
    }
    

    依次类推
    IsWaybillExistsRequest类如下

    package cn.hewie.webService.bean.request;
    
    import javax.xml.bind.annotation.*;
    
    @XmlType(propOrder = {"clientInfo", "waybillNo"})
    public class IsWaybillExistsRequest {
    
        private String waybillNo;
        private ClientInfo clientInfo;
    
        @XmlElement(name = "WaybillNo", namespace = NameSpace.TEMP_URI)
        public String getWaybillNo() {
            return waybillNo;
        }
    
        public void setWaybillNo(String waybillNo) {
            this.waybillNo = waybillNo;
        }
    
        @XmlElement(name = "ClientInfo", namespace = NameSpace.TEMP_URI)
        public ClientInfo getClientInfo() {
            return clientInfo;
        }
    
        public void setClientInfo(ClientInfo clientInfo) {
            this.clientInfo = clientInfo;
        }
    }
    

    ClientInfo.java如下

    package cn.hewie.webService.bean.request;
    
    import javax.xml.bind.annotation.XmlElement;
    
    public class ClientInfo {
    
        private ClientAddress clientAddress;
        private String clientID;
        private String password;
        private String version;
    
        @XmlElement(name = "ClientAddress", namespace = NameSpace.TEMP_URI)
        public ClientAddress getClientAddress() {
            return clientAddress;
        }
    
        public void setClientAddress(ClientAddress clientAddress) {
            this.clientAddress = clientAddress;
        }
    
        @XmlElement(name = "ClientID", namespace = NameSpace.TEMP_URI)
        public String getClientID() {
            return clientID;
        }
    
        public void setClientID(String clientID) {
            this.clientID = clientID;
        }
    
        @XmlElement(name = "Password", namespace = NameSpace.TEMP_URI)
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @XmlElement(name = "Version", namespace = NameSpace.TEMP_URI)
        public String getVersion() {
            return version;
        }
    
        public void setVersion(String version) {
            this.version = version;
        }
    }
    

    经过测试,该接口只需要节点IsWaybillExists下存在

    <tem:ClientID></tem:ClientID>
    

    就可以正确返回了(其他节点都有optional标示),为了简单起见,更下层的其他类我们就不列举出实现了(事实上demo中没有实现ClientContact类)。

    2. Xml To Bean

    将Xml转化为Bean与上述过程类似。

    2.1 转化方法

    XmlUtil中转化方法如下:

    /**
         * transfer xml to bean
         *
         * @param xml 待转化的xml字符串
         * @param c 转化后的类
         * @param <T> 转化后类类型
         * @return 转化后的类对象
         */
        @SuppressWarnings("unchecked")
        public static <T> T xmlToBean(String xml, Class<T> c) {
            T t = null;
            try {
                JAXBContext context = JAXBContext.newInstance(c);
                Unmarshaller unmarshaller = context.createUnmarshaller();
                t = (T) unmarshaller.unmarshal(new StringReader(xml));
            } catch (JAXBException e) {
                e.printStackTrace();
            }
            return t;
        }
    

    2.2 命名空间

    与上述类似,但注意不要把命名空间与属性弄错。
    NameSpace.java

    package cn.hewie.webService.bean.response;
    
    public class NameSpace {
        public static final String BASIC_PREFIX = "soap";
        public static final String BASIC_URI = "http://www.w3.org/2003/05/soap-envelope";
    
        public static final String TEMP_PREFIX = "";
        public static final String TEMP_URI = "http://tempuri.org/";
    
        public static final String XSI_PREFIX = "xsi";
        public static final String XSI_URI = "http://www.w3.org/2001/XMLSchema-instance";
    
        public static final String XSD_PREFIX = "xsd";
        public static final String XSD_URI = "http://www.w3.org/2001/XMLSchema";
    }
    

    package-info.java

    @XmlSchema(
            xmlns = {
                    @XmlNs(prefix = NameSpace.BASIC_PREFIX, namespaceURI = NameSpace.BASIC_URI),
                    @XmlNs(prefix = NameSpace.XSI_PREFIX, namespaceURI = NameSpace.XSI_URI),
                    @XmlNs(prefix = NameSpace.XSD_PREFIX, namespaceURI = NameSpace.XSD_URI)
            })
    package cn.hewie.webService.bean.response;
    
    import javax.xml.bind.annotation.XmlNs;
    import javax.xml.bind.annotation.XmlSchema;
    

    2.3 使用注解标识Bean

    与上述类似,这里不再赘述。

    3. 发送请求

    利用Okhttp发送请求类HttpRequest如下:

    package cn.hewie.webService.client;
    
    import okhttp3.*;
    
    import java.io.IOException;
    
    public class HttpRequest {
        public static String execute(String postBody) throws IOException {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .post(RequestBody.create(MediaType.parse("application/soap+xml; charset=utf-8"), postBody))
                    .url("https://infotrack.naqelexpress.com/NaqelAPIServices/NaqelAPIDemo/5.0/XMLShippingService.asmx")
                    .build();
            Response response = client.newCall(request).execute();
            if (!response.isSuccessful()) {
                System.out.println("服务器错误:" + response);
            }
    
    //        Headers responseHeaders = response.headers();
    //        for (int i = 0; i < responseHeaders.size(); i++) {
    //            System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
    //        }
    
            String result = response.body().string();
    
            return result;
        }
    }
    
    

    1.6 测试

    测试的时候只需要正确组装类的层级结构,然后调用相应接口,就可以正确处理了。
    获得的结果进行转化后,即可获得正确的类结构。

    public static void testHttpRequest() {
            ClientAddress clientAddress = new ClientAddress();
            clientAddress.setPhoneNumber("11111111111");
            clientAddress.setPOBox("aaa");
            clientAddress.setZipCode("111111");
            clientAddress.setFax("aaa");
            clientAddress.setFirstAddress("111");
            clientAddress.setLocation("111");
            clientAddress.setCountryCode("10200");
            clientAddress.setCityCode("22");
    
            ClientInfo clientInfo = new ClientInfo();
            clientInfo.setClientAddress(clientAddress);
            clientInfo.setClientID("1");
            clientInfo.setPassword("111");
            clientInfo.setVersion("1.0");
    
            IsWaybillExistsRequest isWaybillExistsRequest = new IsWaybillExistsRequest();
            isWaybillExistsRequest.setClientInfo(clientInfo);
            isWaybillExistsRequest.setWaybillNo("111");
    
            RequestBody requestBody = new RequestBody();
            requestBody.setIsWaybillExistsRequest(isWaybillExistsRequest);
    
            RequestHeader requestHeader = new RequestHeader();
            RequestEntity requestEntity = new RequestEntity();
            requestEntity.setHeader(requestHeader);
            requestEntity.setBody(requestBody);
    
            try {
                String body = XmlUtil.beanToXml(requestEntity, RequestEntity.class);
                System.out.println("==============Bean to Xml==============");
                System.out.println(body);
    
                String response = HttpRequest.execute(body);
                System.out.println("=============response body==============");
                System.out.println(response);
    
                ResponseEntity responseEntity = XmlUtil.xmlToBean(response, ResponseEntity.class);
                System.out.println("=============Xml to Bean================");
                System.out.println(responseEntity.getResponseBody().getIsWaybillExistsResponse().getWaybillExistsResult());
            } catch (JAXBException e) {
                e.printStackTrace();
                System.out.println("JAXBException happened.");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("unexpected error happened.");
            }
        }
    

    运行后,测试结果如下:

    ==============Bean to Xml==============
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <soap:Envelope xmlns:tem="http://tempuri.org/" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
        <soap:Header/>
        <soap:Body>
            <tem:IsWaybillExists>
                <tem:ClientInfo>
                    <tem:ClientAddress>
                        <tem:PhoneNumber>11111111111</tem:PhoneNumber>
                        <tem:POBox>aaa</tem:POBox>
                        <tem:ZipCode>111111</tem:ZipCode>
                        <tem:Fax>aaa</tem:Fax>
                        <tem:FirstAddress>111</tem:FirstAddress>
                        <tem:Location>111</tem:Location>
                        <tem:CountryCode>10200</tem:CountryCode>
                        <tem:CityCode>22</tem:CityCode>
                    </tem:ClientAddress>
                    <tem:ClientID>1</tem:ClientID>
                    <tem:Password>111</tem:Password>
                    <tem:Version>1.0</tem:Version>
                </tem:ClientInfo>
                <tem:WaybillNo>111</tem:WaybillNo>
            </tem:IsWaybillExists>
        </soap:Body>
    </soap:Envelope>
    
    =============response body==============
    <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><IsWaybillExistsResponse xmlns="http://tempuri.org/"><IsWaybillExistsResult>true</IsWaybillExistsResult></IsWaybillExistsResponse></soap:Body></soap:Envelope>
    =============Xml to Bean================
    true
    
    展开全文
  • Java Axis 直接调用webservice 接口工具类, 无需根据wsdl编译客户端,需要axis相关包,测试使用axis 1.4, 附demo引入axis包后直接可以测试;
  • http和WebService 调用接口Java代码demo,可配置根据情况自行配置内网访问
  • Java调用webservice

    2019-06-20 17:34:22
    执行如命令:wsdl2java -url d:demo.wsdl -p client -s -o stub(url可以是本地也可以是网络地址如下图标注) 获取wsdl文件,以上述的天气预报为例点击WSDL获得内容如下 自定义接口访问 SOAP协议访问 HTTP请求 ...

    目录

    获取请求路径

     接口调用

    获取接口请求方式

    通过wsdl文件生成访问接口

    axis2的工具包

    执行如命令:wsdl2java -url d:demo.wsdl -p client -s -o stub(url可以是本地也可以是网络地址如下图标注)

    获取wsdl文件,以上述的天气预报为例点击WSDL获得内容如下

    自定义接口访问

    SOAP协议访问

    HTTP请求


    获取请求路径

    一般是接口提供人提供,提供wsdl文件或者其他请求方式

    可以根据wsdl文件通过axi生成Java文件,可以像调用本地服务一样调用webservice接口

    20多个常用的免费WebService接口 https://www.cnblogs.com/jpfss/p/8397596.html,取第一个天气预报为例

     接口调用

    获取接口请求方式

    可参考:https://blog.csdn.net/qq_31183297/article/details/79522746

    通过wsdl文件生成访问接口

    生成方式为如下:

    axis2的工具包

    执行如命令:wsdl2java -url d:demo.wsdl -p client -s -o stub(url可以是本地也可以是网络地址如下图标注)

    下图是我根据天气预报生成的文件,由于我没配置axis2的环境变量,所以进入cmd要在axis2的bin目录下执行该命令,生成的文件就在stub下,包名就是client,然后将文件放到项目中就可以用了

    当然需要引入如下依赖

    <!-- https://mvnrepository.com/artifact/org.apache.axis/axis -->
            <dependency>
                <groupId>org.apache.axis</groupId>
                <artifactId>axis</artifactId>
                <version>1.4</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/wsdl4j/wsdl4j -->
            <dependency>
                <groupId>wsdl4j</groupId>
                <artifactId>wsdl4j</artifactId>
                <version>1.6.3</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/axis/axis-jaxrpc -->
            <dependency>
                <groupId>axis</groupId>
                <artifactId>axis-jaxrpc</artifactId>
                <version>1.4</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/commons-discovery/commons-discovery -->
            <dependency>
                <groupId>commons-discovery</groupId>
                <artifactId>commons-discovery</artifactId>
                <version>0.5</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.axis2/axis2-transport-http -->
            <dependency>
                <groupId>org.apache.axis2</groupId>
                <artifactId>axis2-transport-http</artifactId>
                <version>1.7.9</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.axis2/axis2-adb -->
            <dependency>
                <groupId>org.apache.axis2</groupId>
                <artifactId>axis2-adb</artifactId>
                <version>1.7.9</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.axis2/axis2-transport-local -->
            <dependency>
                <groupId>org.apache.axis2</groupId>
                <artifactId>axis2-transport-local</artifactId>
                <version>1.7.9</version>
            </dependency>
          

    获取wsdl文件,以上述的天气预报为例点击WSDL获得内容如下

    自定义接口访问

    打开如上的天气预报服务界面,点击Endpoint,则看到提供了几种访问形式

    SOAP协议和HTTP协议访问

    SOAP协议访问

    请求参数

    POST /WebServices/WeatherWebService.asmx HTTP/1.1
    Host: www.webxml.com.cn
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    SOAPAction: "http://WebXml.com.cn/getSupportCity"
    
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <getSupportCity xmlns="http://WebXml.com.cn/">
          <byProvinceName>string</byProvinceName>
        </getSupportCity>
      </soap:Body>
    </soap:Envelope>

    Java代码​​​​​​​

    package com.cjb.util.webservice;
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.methods.RequestEntity;
    import org.apache.commons.httpclient.methods.StringRequestEntity;
    import org.apache.commons.io.IOUtils;
    
    public class SoapRequestUtil {
    
        public static void main(String[] args) throws Exception {
            String wsdl = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
            int timeout = 10000;
            StringBuffer sb = new StringBuffer("");
            sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                    "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
                    "  <soap:Body>\n" +
                    "    <getSupportDataSet xmlns=\"http://WebXml.com.cn/\" />\n" +
                    "  </soap:Body>\n" +
                    "</soap:Envelope>");
    
            HttpClient client = new HttpClient();
            PostMethod postMethod = new PostMethod(wsdl);
            client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout);// 设置连接超时
            client.getHttpConnectionManager().getParams().setSoTimeout(timeout);// 设置读取时间超时
            RequestEntity requestEntity = new StringRequestEntity(sb.toString(), "text/xml", "UTF-8");// 然后把Soap请求数据添加到PostMethod中
            postMethod.setRequestHeader("SOAPAction","http://WebXml.com.cn/getSupportDataSet");//设置请求头部,否则可能会报 “no SOAPAction header” 的错误
            postMethod.setRequestEntity(requestEntity);// 设置请求体
            int status = client.executeMethod(postMethod);
            InputStream is = postMethod.getResponseBodyAsStream();// 获取响应体输入流
            String result = IOUtils.toString(is);// 获取请求结果字符串
            URL url = new URL(wsdl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
            conn.setRequestMethod("POST");
            conn.setUseCaches(false);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setConnectTimeout(timeout);
            conn.setReadTimeout(timeout);
            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
            dos.write(sb.toString().getBytes("utf-8"));
            dos.flush();
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
            String line = null;
            StringBuffer strBuf = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                strBuf.append(line);
            }
            dos.close();
            reader.close();
            System.out.println(strBuf.toString());
        }
    
    }

    HTTP请求

    分为get和post两种方式

    代码如下:

    package com.cjb.util.webservice;
    
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    public class HttpUtil {
    
        public static void doGet(String httpurl) {
            HttpURLConnection connection = null;
            InputStream is = null;
            BufferedReader br = null;
            OutputStreamWriter out = null;
            try {
                // 创建远程url连接对象
                URL url = new URL(httpurl);
                // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
                connection = (HttpURLConnection) url.openConnection();
                // 设置连接方式:get
                connection.setRequestMethod("GET");
    //            //2.传入参数部分
    //            connection.setDoOutput(true);
    //            // 得到请求的输出流对象
    //            out = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
    //            // 把数据写入请求的Body
    //            out.write("byProvinceName=陕西"); //参数形式跟在地址栏的一样
    //            out.flush();
    //            out.close();
                // 设置连接主机服务器的超时时间:15000毫秒
                connection.setConnectTimeout(15000);
                // 设置读取远程返回的数据时间:60000毫秒
                connection.setReadTimeout(60000);
                // 发送请求
                connection.connect();
                // 通过connection连接,获取输入流
                if (connection.getResponseCode() == 200) {
                    is = connection.getInputStream();
                    br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                    String temp = null;
                    while ((temp = br.readLine()) != null) {
                        System.out.println(temp);
                    }
                }
            }catch (MalformedURLException e) {
                e.printStackTrace();
            }catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != is) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(null != br){
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    //            if(null != out){
    //                try {
    //                    out.close();
    //                } catch (IOException e) {
    //                    e.printStackTrace();
    //                }
    //            }
                connection.disconnect();// 关闭远程连接
            }
        }
    
        public static void doPost(String httpUrl, String param) {
    
            HttpURLConnection connection = null;
            InputStream is = null;
            BufferedReader br = null;
            OutputStreamWriter out = null;
            try {
                URL url = new URL(httpUrl);
                // 通过远程url连接对象打开连接
                connection = (HttpURLConnection) url.openConnection();
                // 设置连接请求方式
                connection.setRequestMethod("POST");
                // 设置连接主机服务器超时时间:15000毫秒
                connection.setConnectTimeout(15000);
                // 设置读取主机服务器返回数据超时时间:60000毫秒
                connection.setReadTimeout(60000);
                // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
                connection.setDoOutput(true);
                // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
                connection.setDoInput(true);
                // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                //2.传入参数部分
                // 得到请求的输出流对象
                out = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
                out.write("byProvinceName=陕西"); //参数形式跟在地址栏的一样
                out.flush();
                out.close();
    
                // 通过连接对象获取一个输入流,向远程读取
                if (connection.getResponseCode() == 200) {
                    is = connection.getInputStream();
                    br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                    String temp = null;
                    while ((temp = br.readLine()) != null) {
                        System.out.println(temp);
                    }
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 关闭资源
                if (null != br) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != is) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != out) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                connection.disconnect();// 断开与远程地址url的连接
            }
        }
    
        public static void main(String[] args) {
            doPost("http://www.webxml.com.cn//WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=陕西",null);
            doGet("http://www.webxml.com.cn//WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=陕西");
        }
    }

     

    展开全文
  • [size=medium]服务端(为客户端提供Webservice接口):  使用工具:myeclipse-8.6.1-win32,apache-tomcat-7.0.11  开发步骤:1.创建工程  File->New->Web Service Project,弹出Web Service Project窗口...
  • 1、java调用第三方webservice接口时,需要的最少jar包 2、提供一个简单的demo实例供参考,包括将类转化为XML,以及将XML运用axis上传到服务器
  • 前提:需要调用webservice接口时,获取到wsdl地址,并清楚里面的相关内容。 1 引入相关jar包:axis相关jar包下载 2 java相关代码,和网上提供的大致相同: package com.demo.service; import java.rmi....
  • 我自己写的一个java调用.net WebService接口的方法及所需jar包,要是有需要可以下载!
  • package com.demo.modules.si.util; import org.apache.axis.client.Call; import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import ...
  • 我用Java调用webservice接口,用的是org.apache.axis包的类,关键代码如下: Call call = null; try { call = (Call)service.createCall(); call.setTargetEndpointAddress(new URL(...
  • JAVA调用远程webservice(wsdl) Demo

    千次阅读 2018-09-19 11:35:17
    调用web service接口时,根据网上查找的demo,都有问题,经过1天的研究,终于明白了调用web service的原理,下面例子便是测试的demo,比较容易理解。 1.首先配置pom文件: &lt;!--spring web Service的包-...
  • 在cmd窗口某个窗口下:执行命令  wsimport -keep -p com.demo.client ...第一步:根据wsdl文件路径生成clinet代码,删除class文件将java文件copy到项目工程目录下:
  • webservice的相关协议原理就在这复述了,小明应该看了吧。一般webservice发布后,可以通过一个以“?wsdl”结尾的url路劲访问到其...接下来实战一下发布webservice接口,以及测试接口调用。 1、cxf+springboot实现webs
  • 最近用cxf调用webservice接口经常出现“文件过早结束”问题。经各种测试,问题在于cookie设置问题,调用接口之前必须封装cookie信息。以下是DEMO代码。 package com.toft.webservice.client.domino; import java...
  • WebService入门java实现服务端接口调用

    千次阅读 2017-03-16 15:59:09
    Java套接字的范例帮助理解第一个javaDemo 服务端套接字代码: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates ...
  • JAVA 使用Xfire调用webservice interface

    千次阅读 2012-11-29 14:17:02
    服务端(为客户端提供Webservice接口):  使用工具:myeclipse-8.6.1-win32,apache-tomcat-7.0.11  开发步骤:1.创建工程  File->New->Web Service Project,弹出Web Service Project窗口,需要填写...
  • webservice解析demo

    2016-09-12 22:44:42
    如:java 的客户端 和dotnet的服务器端的接口调用: 得到接口和方法 : 基于标准的协议,可编程语言; 服务器开发 api; 特点: 自包含:只要客户端支持http和xml就可以; 自描述:只需要知道请求响应的...
  • 例如提供一个接口地址http://***.***.25.82:9001/PayQRCode/Callback.ashx, java该如何调用,有demo最好
  • WebService简单demo实现

    2020-04-29 10:34:35
    1.写接口,供外调用 package com.my.service; import java.util.List; import javax.jws.WebService; import com.my.entity.User; @WebService(targetNamespace = "com.my.service") public interface Login { ...
  • 项目使用webservice的方式调用了中央气象局的气象接口,该demo可以满足工作或学习中的大部分需求。
  • 最近由于甲方那边想要一个在JAVA代码里面调用webservice实例的小demo,于是乎便接触到了这一块。主要是由于我们项目架了KONG网关并限定了请求方式的影响,导致平常的动态客户端方式无法成功调用webservice实例,因此...
  • CXFDemo 一个关于CXF实现jax-ws规范的webservice #CXF框架 Apache CXF=Celtix+Xfire.是一个开源的一个webservice,可以与spring无缝集成。支持soap1.1、1.2、RESTtful或者CORBA。 ##使用CXF实现jax-ws规范的...
  • 按照上面那篇文章的demo运行成功以后,我想在java web中加入一个webservice服务,供其他的java web项目调用。 1.首先,在项目中添加com.xdx.webservice包,如图所示。 2.在其中加入WetherServiceInter接口
  • 基于JAX的WebService实现demo(一)

    千次阅读 2013-08-28 22:08:29
     在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(Service Endpoint Interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。  在
  • 当然,通过导入用户EXCEL系统原生也是可以实现的,这里更多考虑的是业务逻辑和操作效率(体验),毕竟以集成接口的方式,其最终结果可以做成JAVA服务项目部署在PU WEBLOGIC应用服务器中,并保持一定的周期自动同步...

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
关键字:

java调用webservice接口demo

java 订阅