CXF webservice服务端查询数据库出错

hannah837 2013-07-23 02:05:18
准备用webservice做一个单点登录系统,对外发布了一个webservice,服务端与客户端的通讯没有问题,但是服务端实现类访问数据库的时候会出现invocation target exception,就像spring没有注入一样。

接口如下:

package com.x.member0.service;
import javax.jws.WebService;
import com.yuanhua.member0.entity.User;
@WebService
public interface IUserService {
/**
* 验证用户信息 getAuthentication
*
*
*@param item
*
*/
public User getAuthentication(User item);



服务端实现类如下:

package com.x.member0.service.impl;

import java.util.List;

import javax.jws.WebService;

import com.x.common.dao.ICommonDao;
import com.x.common.dao.sqlimpl.CommonDaoSqlImpl;
import com.x.common.service.BaseService;
import com.x.member0.entity.User;
import com.x.member0.service.IUserService;

/**
* 用户信息dao UserDao
*
*
*
*/
@WebService(endpointInterface = "com.x.member0.service.IUserService")
public class UserServiceImpl extends BaseService implements IUserService {


/*
* (non-Javadoc)
* @see
* com.yuanhua.member1.service.impl.IUserDao#getAuthentication(com.yuanhua
* .member0.entity.User)
*/
public User getAuthentication(User item) {
String hql = "from User where loginName='" + item.getLoginName()
+ "' and userPwd='" + item.getUserPwd() + "' and isDeleted=0";

User u = (User) this.getCommonDao().obj(hql);//无法访问dao层
return item;
}


客户端:

package aa;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.x.member0.entity.User;
import com.x.member0.service.IUserService;

public class TestClient {

public static void main(String[] args) {
testWebserviceClient();
}

public static void testWebserviceClient() {
// 加载客户端配置文件
ApplicationContext context = new FileSystemXmlApplicationContext(
"src/applicationContext.xml");
// 获取webservice接口
IUserService service = (IUserService) context
.getBean("yhProtalWebservice");
User item = new User();
item.setLoginName("admin");
item.setUserPwd("admin");
User u = service.getAuthentication(item);
System.out.println(u);


运行后,客户端的值可以很顺利的传到服务端,无论传字符串、对象、集合都可以。
服务端实现类里面写死一个值,也可以顺利的传回客户端,webservice通讯应该是没有问题。
但是一旦到了访问数据库的,就是调用dao层的方法,就会出现invocation target exception,就像spring没有注入一样。但是spring中我肯定注入过这个bean。

控制台报错如下
服务端

[yuanhua] WARN [http-8080-1] org.apache.cxf.common.logging.LogUtils.doLog(371) | Application {http://impl.service.member0.yuanhua.com/}UserServiceImplService#{http://service.member0.yuanhua.com/}getAuthentication has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault
at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:155)
at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:86)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:121)
at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:206)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:218)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:200)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:114)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
at com.yuanhua.member0.service.impl.UserServiceImpl.getAuthentication(UserServiceImpl.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
... 38 more


客户端:

信息: Creating Service {http://service.member0.yuanhua.com/}IUserServiceService from class com.yuanhua.member0.service.IUserService
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156)
at $Proxy26.getAuthentication(Unknown Source)
at aa.TestClient.testWebserviceClient(TestClient.java:25)
at aa.TestClient.main(TestClient.java:12)
Caused by: org.apache.cxf.binding.soap.SoapFault: Fault occurred while processing.
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:105)
at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:797)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1618)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1491)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1399)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:646)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:533)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
... 3 more

请各位给看一看了,谢谢
...全文
312 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010431688 2015-12-24
  • 打赏
  • 举报
回复
怎么解决了吗?
u010431688 2015-12-24
  • 打赏
  • 举报
回复
我也遇到类似的问题了
hannah837 2013-07-26
  • 打赏
  • 举报
回复
引用 3 楼 splendid_java 的回复:
外部调用的service的时候,看是否脱离了spring环境,context是否获取到。
请说一下怎么查看context
ZHOU西口 2013-07-25
  • 打赏
  • 举报
回复
外部调用的service的时候,看是否脱离了spring环境,context是否获取到。
hannah837 2013-07-25
  • 打赏
  • 举报
回复
spring配置没有问题,如果按照传统的ssh访问方式ok的
  • 打赏
  • 举报
回复
你把命名空间加一下,,另外看看spring配置

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧