属于Java的webservices - springboot+webservices+xfire

利用 xfire 进行webservices 接口调用传递数据

目前探索到俩种方法

引入 pom.xml

<!--WebService接口依赖-->
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-all</artifactId>
<version>1.2.6</version>
<!--排除冲突的依赖包-->
<exclusions>
<exclusion>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>

第一种需要定义调用的方法以及命名空间的方法

此处只传递一个参数 string 内容是一个xml 数据

   /**
     *  xfireSendMsg -传递xml 请求数据 <br>
     * @version: 1.0 <br>
     * @since: 2021/12/28 2:45 下午 <br>
     * @author: 释槐~ <br>
     *
     * @param xfireUrl
     * @param namespaceURI
     * @param method
     * @param reqXml
     * @return java.lang.String
     */
    public static String xfireSendMsg(String xfireUrl, String namespaceURI, String method, String reqXml) throws Exception {

        /**  创建服务   **/
        Client client = new Client(new URL(xfireUrl));
        /**  设置调用的方法和方法的命名空间   **/
        client.setProperty(namespaceURI, method);
        /**  通过映射获得结果   **/
        Object[] result = new Object[0];
        try {
            result = client.invoke(method, new Object[]{reqXml});
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
        String xml = (String) result[0];
        log.info("响应报文 : {}", xml);
        return xml;
    }

调用例子

public static void main(String[] args) throws Exception {

        String xfireUrl = "请求地址?wsdl";
        String namespaceURI = "上述地址浏览器请求展示处理的命名空间地址";
        String method = "方法地址";

        obj obj = new obj();
        /** 对象转xml string 传递 **/
        String convertToXml = XMLUtil.convertToXml(obj);
        /** 调用服务 **/
        XFireClient.xfireSendMsg(xfireUrl, namespaceURI, method, convertToXml);
    }

xml工具

public class XMLUtil {
    public static String convertToXml(Object obj) {
    StringWriter sw = new StringWriter();
    try {
        JAXBContext context = JAXBContext.newInstance(obj.getClass());
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
        marshaller.marshal(obj, sw);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
    return sw.toString();
    }
}

类例子

/**
 * @description:  <br>
 * @since: 2021/12/20 5:37 下午 <br>
 * @author: 释槐~ <br>
 * @version: <br>
 */
@XmlAccessorType(XmlAccessType.FIELD)
/** XML文件中的根标识 **/
@XmlRootElement(name = "X1")
public class HisMessage implements Serializable {
    private static final long serialVersionUID = 1L;
    @XmlElement(name="X2")
    private obj x2;
    @XmlElement(name="x3")
    private obj x3;

   /**  get与set **/
}

第二种就是方法调用式

建立包目录结构一定要和 提供方一致!!!!!!!!!!!! 一定要一致 比如com.xxx.xxx 一定一致

建立相同接口类

/**  与wsdl 里面类名一致**/
public interface X1{

/**  与wsdl 里面方法一致**/
    public String X2(String strXml);

}

在启动类进行 bean加载;方便使用处获取

@Bean("MyIService")
	public X1 getIService() throws MalformedURLException {
		log.error("加载接口代理工厂开始~~~~");
		Service service = new ObjectServiceFactory().create(X1.class);
		XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
		X1 iService = (X1) factory.create(service, "请求地址?wsdl");
		log.error("加载接口代理工厂开始~~~~");
		return iService;
	}

这些可以在你想要的地方调用啦

    @Resource
    private X1 MyIService;/** 为什么叫这个名称你们懂噻 **/
    
    public void TestWebServices(){
        String str = MyIService.X2(convertToXml);
        System.out.println(str);
    }
    

到这里就完了 ;返回参数转化成类 可以采用反射等;具体怎么深入改造加油

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值