当前位置:编程学习 > JAVA >>

Interceptor has thrown exception, unwinding now(ClassCastException)

这个是测试类:
public void test(){
        System.out.println("juint test run!");
        //声明JAXRS服务对象
        JAXRSServerFactoryBean  factory = new JAXRSServerFactoryBean();
        //加载服务类
        factory.setServiceBeans(new SaleServiceImpl());
        //声明地址,注意只声明地址和端口即可
        factory.setAddress("http://localhost:8080/");
        
//        SaleService saleClient = (SaleService) factory.create();
//        System.out.println("2");        
//        ClientProxy proxy = (ClientProxy) Proxy.getInvocationHandler(saleClient);
//        
//        Client client = proxy.getClient();
        
//        Map<String,Object> outProps = new HashMap<String,Object>();
//        outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
//        outProps.put(WSHandlerConstants.USER, "admin");
//        outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
//        outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, WsClientOutAuthHandler.class.getName());
//        factory.getOutInterceptors().add(new SAAJOutInterceptor());
//        factory.getOutInterceptors().add(new WSS4JOutInterceptor(outProps));
        //factory.getOutInterceptors().add(new JAXRSOutInterceptor());
        
        Map<String, Object> inProps = new HashMap<String, Object>();
        inProps.put("action", "UsernameToken");
        inProps.put("passwordType", "PasswordText");
        inProps.put("passwordCallbackClass", "com.csair.acp.handler.WsOutAuthHandler");
        factory.getInInterceptors().add(new SAAJInInterceptor());
        factory.getInInterceptors().add(new WSS4JInInterceptor(inProps));
        
        
        
        GetMethod get = new GetMethod("http://localhost:8080/v1/infos/");

        get.setRequestHeader("accept","application/xml");
        //get.setRequestHeader("accept","application/json");

        HttpClient hc = new HttpClient();

        hc.getParams().setContentCharset("UTF-8");       //设置编码

        int code=0;
try {
code = hc.executeMethod(get);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

        System.err.println("返回的状态码:"+code);

        if(code==200){
                 String str="";
try {
str = get.getResponseBodyAsString();
} catch (IOException e) {
e.printStackTrace();
}

                 System.err.println("返回信息:\n"+str);

        }

        get.releaseConnection(); 
        
    }


}

Spring配置文件 (备注:是Restful风格的WebService)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">

<!-- do not use import statements if CXFServlet init parameters link to 
this beans.xml -->

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 
 
<bean id="wsInAuthHandler" class="com.csair.acp.handler.WsInAuthHandler"/>

<jaxrs:server id="saleRestService" address="/v1">
<jaxrs:serviceBeans>
<ref bean="saleService" />
</jaxrs:serviceBeans>

<!-- 通过一个简单的用户口令验证机制来加强一下WebService的安全性: -->
<jaxrs:inInterceptors> 
    
      <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
         <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
              <constructor-arg>
                 <map>
                   <entry key="action" value="UsernameToken" />
                     <entry key="passwordType" value="PasswordText" />
                   <entry key="passwordCallbackRef">
                    <ref bean="wsInAuthHandler" /> 
                   </entry>
                  </map>
                </constructor-arg>
          </bean>
        <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
</jaxrs:inInterceptors>
<!--
<jaxrs:outInterceptors>
          <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" />
          <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
              <constructor-arg>
                <map>
                    <entry key="action" value="UsernameToken" />
                      <entry key="passwordType" value="PasswordText" />
                     <entry key="user" value="server" />
                       <entry key="passwordCallbackClass" value="com.csair.acp.handler.WsOutAuthHandler" />
                  </map>
                </constructor-arg>
           </bean>
           <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
     </jaxrs:outInterceptors>
      --> 
</jaxrs:server>

<!--

<jaxws:endpoint id="mycalc" implementor="com.csair.acp.service.impl.SaleServiceImpl" address="/v1">  
 </jaxws:endpoint>  
 -->
</beans>



没加入用户身份验证的时候WebService能发布成功,也能运行返回xml


2013-6-26 10:27:05 org.apache.cxf.interceptor.LoggingInInterceptor logging
信息: Inbound Message
----------------------------
ID: 1
Address: /v1/infos/
Encoding: 
Content-Type: 
Headers: {Host=[localhost:8080], User-Agent=[Jakarta Commons-HttpClient/3.0.1], Content-Type=[null], Accept=[application/xml]}
Payload: 
--------------------------------------
2013-6-26 10:27:05 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
警告: Interceptor has thrown exception, unwinding now
java.lang.ClassCastException: org.apache.cxf.message.XMLMessage cannot be cast to org.apache.cxf.binding.soap.SoapMessage
at org.apache.cxf.binding.soap.saaj.SAAJInInterceptor.handleMessage(SAAJInInterceptor.java:71)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:104)
at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:99)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:452)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:159)
at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:220)
at org.apache.cxf.transport.servlet.AbstractCXFServlet.doGet(AbstractCXFServlet.java:158)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.apache.cxf.transport.servlet.AbstractCXFServlet.service(AbstractCXFServlet.java:211)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:427)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:494)
at org.eclipse.jetty.server.session.SessionHandler.handle(SessionHandler.java:182)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:933)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:334)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:992)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:541)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:203)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Thread.java:619)

这是控制台输出的异常信息,求指导,自己找资料搞了一天了,没办法解决 ClassCastException  CXF WebService WebService  Restful风格WebService WebService身份验证 --------------------编程问答-------------------- 不是类型转换异常吗,java.lang.ClassCastException: org.apache.cxf.message.XMLMessage cannot be cast to org.apache.cxf.binding.soap.SoapMessage,你把这个谷歌一下,很多答案看看有没有你需要的 --------------------编程问答--------------------
引用 1 楼 wufengui1315 的回复:
不是类型转换异常吗,java.lang.ClassCastException: org.apache.cxf.message.XMLMessage cannot be cast to org.apache.cxf.binding.soap.SoapMessage,你把这个谷歌一下,很多答案看看有没有你需要的


找了!没我想要的。。。。 --------------------编程问答--------------------
引用 2 楼 u011167674 的回复:
Quote: 引用 1 楼 wufengui1315 的回复:

不是类型转换异常吗,java.lang.ClassCastException: org.apache.cxf.message.XMLMessage cannot be cast to org.apache.cxf.binding.soap.SoapMessage,你把这个谷歌一下,很多答案看看有没有你需要的


找了!没我想要的。。。。


引用 2 楼 u011167674 的回复:
Quote: 引用 1 楼 wufengui1315 的回复:

不是类型转换异常吗,java.lang.ClassCastException: org.apache.cxf.message.XMLMessage cannot be cast to org.apache.cxf.binding.soap.SoapMessage,你把这个谷歌一下,很多答案看看有没有你需要的


找了!没我想要的。。。。

看一下是不是xml文件格式的问题,一般不能转换都可能是格式写错了,比图“5”可以转换成Integer类型,但是“A”则不可以。 --------------------编程问答--------------------
引用 2 楼 u011167674 的回复:
Quote: 引用 1 楼 wufengui1315 的回复:

不是类型转换异常吗,java.lang.ClassCastException: org.apache.cxf.message.XMLMessage cannot be cast to org.apache.cxf.binding.soap.SoapMessage,你把这个谷歌一下,很多答案看看有没有你需要的


找了!没我想要的。。。。

看一下是不是xml文件格式的问题,一般不能转换都可能是格式写错了,比图“5”可以转换成Integer类型,但是“A”则不可以。


WSS4JInInterceptor这个需要传入SOAP类型的SoapMessage   但是貌似我是传入XMLMessage 
在这里我有几点疑问(第一次接触CXF)  Soap不是支持返回xml么?   是不是我用Restful风格的,在客户端测试的时候发送的是http请求,故报错了?求解
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,