java cxf 调用IIS服务报错Cannot create a secure XMLInputFactory 问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java cxf 调用IIS服务报错Cannot create a secure XMLInputFactory 问题相关的知识,希望对你有一定的参考价值。

Cannot create a secure XMLInputFactory 问题

  在用 CXF 做webService 客户端解析程序的过程中遇到了一个异常用了两天的时间终于搞定了。
  客户端代码如下:
  JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean(); soapFactoryBean.setAddress(""); soapFactoryBean.setServiceClass(IHelloService.class); IHelloService hw = (IHelloService)soapFactoryBean.create(); System.out.println(hw.sayHello("HE"));
  接口和服务都没有问题 但是 运行后 就报
  javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory 异常。
  在网上找了一下答案 ,都 不管用, 说缺少 woodstox-core-asl-4.2.0.jar 包的原因,但是我项目中却有这个jar 包 但还是 报 同样的问题。

参考技术A XMLSchema这个包呢 参考技术B 一样的问题。好烦,找了一下午 还是没解决 参考技术C 只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。

配置实例:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>

或者

<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>

看看你的这个BEAN的定义,是不是正常。建议把配置文件贴出来

多种方式解决Java控制台报错 java.util.LinkedHashMap cannot be cast to.....

问题描述

今天在使用RestTemplate调用服务的时候,因为服务提供者返回的是一个List集合,所以在使用消费者调用的时候,restTemplate.getForObject()期待返回的类型直接写成了List.class

相关代码如下

 public List<DocInfoRela> getFilePath() 
        String url = serviceUrl + "/common/getFilePath";
        List<DocInfoRela> docInfoRelas = restTemplate.getForObject(url, List.class);
        return docInfoRelas;
    

生产者代码

消费者代码

但是接收到List之后,在便利的时候却报错了,报错内容如下:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to cn.chinatowercom.postaccounting.entity.DocInfoRela

ERROR 2022-11-17 15:09:32 [dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to cn.chinatowercom.postaccounting.entity.DocInfoRela] with root cause

相关代码和如图截图:

解决问题

方式1

我个人比较喜欢这种方案

定义返回List

    public  List<DocInfoRela> getFilePath() 
        String url = serviceUrl + "/common/getFilePath";
        List<DocInfoRela> docInfoRelas = restTemplate.getForObject(url, List.class);
        return docInfoRelas;
    

然后将list再次转为json串,然后由json串再转为list

代码如下

 		// 从数据库获取到数据
            List<DocInfoRela> DocInfoRelasList = this.getFilePath();
            // 将list再次转为json串,然后由json串再转为list
            String docInfoRelaStrings = JSON.toJSONString(DocInfoRelasList);
            DocInfoRelasList = JSON.parseArray(docInfoRelaStrings, DocInfoRela.class);

方式2

返回结果以String类型接受,也即接受的是一个json字符串

代码如下

 public String getFilePath() 
        String url = serviceUrl + "/common/getFilePath";
        String docInfoRelas = restTemplate.getForObject(url, String.class);
        return docInfoRelas;
    

然后再使用阿里巴巴的fastjson将json字符串转变成list集合

代码如下

			 // 从数据库获取到文件路径
            String jsonString = this.getFilePath();
            // 将json字符串转集合
            List<DocInfoRela> docInfoRelas = JSON.parseArray(jsonString, DocInfoRela.class);

方式3

备注:这个我没有试过,在网上找到的一种方案

首先导入net.sf.json 类

    <dependency>
       <groupId>net.sf.json-lib</groupId>
       <artifactId>json-lib</artifactId>
       <version>2.3</version>
       <classifier>jdk15</classifier>
     </dependency>

然后 使用JSONObject中的方法, 先将数据转成json字符串, 在转成实体对象即可。

JSONObject jsonObject=JSONObject.fromObject(objectStr); // 将数据转成json字符串
Person per = (DocInfoRela)JSONObject.toBean(jsonObject, DocInfoRela.class); //将json转成需要的对象

总结

以上就是遇到java.util.LinkedHashMap cannot be cast to…的几种解决思路,我个人喜欢第一种,如有什么问题,欢迎讨论留言

以上是关于java cxf 调用IIS服务报错Cannot create a secure XMLInputFactory 问题的主要内容,如果未能解决你的问题,请参考以下文章

weblogic 整合cxf 报错:cannot create a secure XmlInputFactory

java.lang.RuntimeException: Cannot create a secure XMLInputFactory 异常处理

使用CXF 2.7.5出现的java.lang.RuntimeException: Cannot create a secure XMLInputFactory错误解决

java cxf动态调用服务端的webservices方法

CXF编写的客户端调用XFire编写的服务端,返回值为null,没有报错

cxf 调用超时程序:ClientProxy.getClient(port) 这句报错