当前位置: 首页 > 知识库问答 >
问题:

JAVAClassCastException:javax。xml。绑定JAXBElement不能被强制转换为

司徒锐进
2023-03-14

我使用Spring Boot调用Web服务。

我的配置类如下:

@Configuration
public class ClientAppConfig {
@Bean
public Jaxb2Marshaller marshaller() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    marshaller.setPackagesToScan("com.client.stub");
    return marshaller;
}

@Bean
public ARTestClient arTestClient(Jaxb2Marshaller marshaller) {
    ARTestClient client = new ARTestClient();
    client.setDefaultUri("uri");
    client.setMarshaller(marshaller);
    client.setUnmarshaller(marshaller);
   return client;
}

我打电话给服务部如下:

    OutputMessageType response = (OutputMessageType) getWebServiceTemplate().marshalSendAndReceive(
            inputMessageType, new SoapActionCallback("http://Serviceuri"));

我发现以下错误:

   [2016-03-18 14:45:43.697] boot - 10272 ERROR [http-nio-8080-exec-1] --- [dispatcherServlet]: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 
  [Request processing failed; nested exception is java.lang.ClassCastException: javax.xml.bind.JAXBElement 
  cannot be cast to com.wfs.client.stub.ar.OutputMessageType] with root cause

如何解组webservice的输出?????如何设置响应的解组器??

共有3个答案

杨宏儒
2023-03-14
    JAXBElement<OutputMessageType> response = (JAXBElement<OutputMessageType>) 
    getWebServiceTemplate().marshalSendAndReceive(
    inputMessageType, new SoapActionCallback("http://Serviceuri"));
    // Then just call 
     System.out.println(response.getValue());

对我的案子很有效

艾阳羽
2023-03-14

如果它今天仍然相关,有一种方法可以在配置文件中解决这个问题。而不是在以下行中使用. setPackagesToScan:marshaller.setPackagesToScan("com.client.stub")
考虑使用. setClassesToBeBound
但是,您将需要引用包下的每个类(将用于编组和解组):

   marshaller.setClassesToBeBound(new Class[] { 
       com.client.stub.Foo.class,
       com.client.stub.Bar.class,
       com.client.stub.Baz.class
   });

没有必要向JAXBElement施压。

洪子晋
2023-03-14

有趣的是,我也有同样的问题,我是这么做的:

把你的反应投射到

JAXBElement<OutputMessageType>

所以结果会是

JAXBElement<OutputMessageType> response = (JAXBElement<OutputMessageType>) getWebServiceTemplate().marshalSendAndReceive(
        inputMessageType, new SoapActionCallback("http://Serviceuri"));
// Then just call
System.out.println(response.getValue());

我的配置和你差不多。我还在想为什么会有ClassCastException。至少我们有一个解决办法。。。

 类似资料: