这个是测试类:
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 WebServiceWebService Restful风格WebServiceWebService身份验证
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 WebServiceWebService Restful风格WebServiceWebService身份验证
解决方案 »
- java.lang.NoSuchMethodError 的错误,请大家帮忙解决
- spring cache异常
- SQL连接JDBC的问题(急救!!!!)
- spring, aop, retry, exception: expected single bean but found 0
- 重装mysql总是失败,救命啊!
- ActiveX插件的运用问题?请大家看看!
- 学了一段时间的JavaSE,想问下关于EE的事
- Delphi如何通过CORBA去使用EJB??
- jquery问题
- 新人对拼接的一点疑问。
- 求一个jar包
- 关于mybatis Invalid bound statement (not found) 问题
找了!没我想要的。
找了!没我想要的。
看一下是不是xml文件格式的问题,一般不能转换都可能是格式写错了,比图“5”可以转换成Integer类型,但是“A”则不可以。
找了!没我想要的。
看一下是不是xml文件格式的问题,一般不能转换都可能是格式写错了,比图“5”可以转换成Integer类型,但是“A”则不可以。
WSS4JInInterceptor这个需要传入SOAP类型的SoapMessage 但是貌似我是传入XMLMessage
在这里我有几点疑问(第一次接触CXF) Soap不是支持返回xml么? 是不是我用Restful风格的,在客户端测试的时候发送的是http请求,故报错了?求解