您的位置:

Java调用Webservice接口三种方法详解

一、JAX-WS方式调用Webservice接口

JAX-WS是Java API for XML Web Services的缩写,是一种比较常见的调用Webservice接口的方式。

首先需要在pom.xml文件中配置JAX-WS依赖:

<dependency>
    <groupId>javax.xml.ws</groupId>
    <artifactId>javax.xml.ws-api</artifactId>
    <version>2.3.1</version>
</dependency>

接下来,创建一个HelloWorld的Webservice服务,提供一个sayHello方法:

@WebService
public class HelloWorld {
 
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

然后,使用JAX-WS的方式创建客户端代码:

public class HelloWorldClient {
 
    public static void main(String[] args) {
        try {
            URL url = new URL("http://localhost:8080/hello?wsdl");
            QName qname = new QName("http://webservice.example.com/", "HelloWorldImplService");
            Service service = Service.create(url, qname);
            HelloWorld hello = service.getPort(HelloWorld.class);
            String result = hello.sayHello("world");
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

其中,url是Webservice服务的地址和WSDL文件的路径,qname是服务的名称和命名空间,service创建一个服务实例,hello是服务的代理类。

通过以上代码,我们就可以调用Webservice接口了。

二、使用CXF框架调用Webservice接口

CXF是一种支持JAX-WS和JAX-RS的开源Web服务框架,常用于Webservice接口的开发和调用。

首先需要在pom.xml文件中配置CXF依赖:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>3.3.3</version>
</dependency>

接下来,创建一个HelloWorld的Webservice服务,提供一个sayHello方法:

@WebService
public class HelloWorld {
 
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

然后,使用CXF的方式创建客户端代码:

public class HelloWorldClient {
 
    public static void main(String[] args) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(HelloWorld.class);
        factory.setAddress("http://localhost:8080/hello");
        HelloWorld hello = (HelloWorld) factory.create();
        String result = hello.sayHello("world");
        System.out.println(result);
    }
}

其中,JaxWsProxyFactoryBean是CXF的一个工厂类,可以创建服务端和客户端代码。使用setServiceClass设置服务的接口类,使用setAddress设置Webservice服务的地址。

通过以上代码,我们就可以使用CXF框架调用Webservice接口了。

三、使用Apache HttpClient库调用Webservice接口

Apache HttpClient是一个开源的Java HTTP客户端库,可以支持HTTP协议的客户端编程。

首先需要在pom.xml文件中配置HttpClient依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.10</version>
</dependency>

然后,使用Apache HttpClient的方式调用Webservice接口:

public class HelloWorldClient {
 
    public static void main(String[] args) {
        try {
            CloseableHttpClient httpclient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost("http://localhost:8080/hello");
            StringEntity stringEntity = new StringEntity("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                    + "<soap:Body>"
                    + "<sayHello xmlns=\"http://webservice.example.com/\">"
                    + "<arg0>world</arg0>"
                    + "</sayHello>"
                    + "</soap:Body>"
                    + "</soap:Envelope>");
            httpPost.setEntity(stringEntity);
            httpPost.setHeader("Content-type", "text/xml;charset=UTF-8");
            CloseableHttpResponse response = httpclient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            String result = EntityUtils.toString(entity, "UTF-8");
            System.out.println(result);
            EntityUtils.consume(entity);
            response.close();
            httpclient.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

其中,我们需要手动拼接SOAP协议的XML请求数据,并使用HttpPost发送请求。同时需要设置请求的Content-type为text/xml;charset=UTF-8格式。

通过以上代码,我们就可以使用Apache HttpClient库调用Webservice接口了。