WebService接口的生成和调用(WebService接口)

转载:
https://blog.csdn.net/qq_41694906/article/details/88029533

结合上面的调用和如下的补充,选择其中适合自己习惯的使用。

1 发布服务 springboot项目正常启动就行了

1.1 添加依赖

<!--cxf归档接口-->
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>4.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.neethi</groupId>
            <artifactId>neethi</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>3.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.2.4</version>
        </dependency>

1.2 写接口

package com.hcy.webservice.service;

import javax.jws.WebService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@WebService
public interface TestService {
 public String hello();
 public String hello2(String name);
 public List<String> hello3(String name);
 public HashMap<String,String> hello4(String name, String name2, String name3);
}

package com.hcy.webservice.service;

import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class TestServiceImpl implements TestService{
    @Override
    public String hello() {
        return "webservice success";
    }
    @Override
    public String hello2(String name) {
        return "webservice success,"+name;
    }

    //["a","b","c","d","e","e"]
    @Override
    public List<String> hello3(String name) {
        return Arrays.asList("a","b","c","d","e","e");
    }

    //{"entry":[{"value":"cxf1","key":"a"},{"value":"cxf22","key":"b"},{"value":"cxf33","key":"c"}]}
    @Override
    public HashMap<String, String> hello4(String name,String name2,String name3) {
        return new HashMap<String, String>(){{
            put("a", name + "1");
            put("b", name2 + "2");
            put("c", name3 + "3");
        }};
    }
    public HashMap<String, String> hello5(String name,String name2,String name3) {
        return new HashMap<String, String>(){{
            put("a", name + "1");
            put("b", name2 + "2");
            put("c", name3 + "3");
        }};
    }

}

1.3 发布

package com.hcy.webservice.service;

import lombok.extern.slf4j.Slf4j;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class PublicWebService implements ApplicationRunner {

    @Autowired
    private TestService testService;

    private String statementUrl="http://127.0.0.1:8666/mc/PigeonholeService?wsdl";
    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("服务发布成功,实现类对象:{}",testService);
        //创建发布工厂
        JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
        //通过工厂设置服务地址(服务访问地址)注入如果要访问服务说明书(wsdl)
        //也是使用的该地址,在该地址后面加上?wsdl接口
        jaxWsServerFactoryBean.setAddress(statementUrl);
        //设置服务类(将服务实现类放入)
        jaxWsServerFactoryBean.setServiceBean(testService);
        //发布服务
        jaxWsServerFactoryBean.create();
        log.info("发布成功");
    }
}

2 客户端

2.1 springboot项目,引入整合包

<!--        <dependency>-->
<!--            <groupId>org.apache.cxf</groupId>-->
<!--            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>-->
<!--            <version>3.4.5</version>-->
<!--        </dependency>-->

调用代码

package com.hcy.mywebmvc.alarm;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import java.util.ArrayList;
import java.util.Map;

@Slf4j
@RestController
public class TestWebservice2 {
	@GetMapping("ws4")
	    public String ws4(String name) throws Exception {
	        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
	        Client client = dcf.createClient("http://127.0.0.1:8666/mc/PigeonholeService?wsdl");
	        Object[] objects = client.invoke("hello2",name);//list3方法名 后面是可变参数
	        //输出调用结果
	        System.out.println(objects[0].getClass());
	        System.out.println(objects[0].toString());
	        String s = JSON.toJSON(objects[0]).toString();
	        System.out.println(s);
	        return s;
	    }

2.2 不用springboot整合sxf,单独引入jar

<!--cxf归档接口-->
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>4.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.neethi</groupId>
            <artifactId>neethi</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>3.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.2.4</version>
        </dependency>

        <!--该依赖必须要有这个是webservice发送时需要的-->
        <!-- https://mvnrepository.com/artifact/wsdl4j.wso2/wsdl4j -->
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.3</version>
        </dependency>

        <!--该依赖必须要有这个是webservice发送时需要的-->
        <!-- https://mvnrepository.com/artifact/org.apache.axis/axis -->
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <!--axisrpc依赖-->
        <!-- 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.2</version>
        </dependency>

调用代码:


	import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.cxf.endpoint.Client;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
@Slf4j
@RestController
public class TestWebservice2 {
		@GetMapping("ws6")
	    public String ws6(String name,String method) throws Exception {
	        String msg = "";
	        try {
	            Service service = new Service();
	            Call call = (Call) service.createCall();
	            call.setTargetEndpointAddress(new java.net.URL("http://127.0.0.1:8666/mc/PigeonholeService?wsdl"));
	            //设置命名空间第一个参数为命名空间 第二个为方法名称
	            QName qName = new QName("http://service.webservice.hcy.com/",
	                    method);
	            call.setOperationName(qName);
	            //设置发送参数的格式
	            Object[] objects = new Object[1];
	            call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN);
	            objects[0] = name;
	            call.setReturnType(XMLType.XSD_STRING);
	//            call.setReturnType(XMLType.SOAP_ARRAY);
	            //接口调用参数有可能没有
	            Object invoke = call.invoke(objects);
	            System.out.println(invoke.getClass().toString());
	//            msg = (String) invoke;
	            log.info("webservice告警转单返回{}:", invoke);
	        } catch (Exception e) {
	            log.error("调用webService接口异常:{}", e);
	        }
	        return msg;
	    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值