帮忙看个问题nor any of its super class is known to this context

165 views
Skip to first unread message

9527

unread,
Feb 15, 2008, 1:45:39 AM2/15/08
to cxf-zh
org.apache.cxf.interceptor.Fault: Marshalling Error: class
org.mumu.user.model.User nor any of its super class is known to this
context.
at
org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:
207)
at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:
63)
at
org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:
84)
at
org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutInterceptor.java:
68)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
208)
at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:
74)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
208)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:
77)
at
org.apache.cxf.transport.servlet.ServletDestination.doMessage(ServletDestination.java:
79)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:
264)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:
123)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:
170)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.doGet(AbstractCXFServlet.java:
152)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
178)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
105)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
869)
at org.apache.coyote.http11.Http11BaseProtocol
$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
664)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
527)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:
80)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:619)
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[javax.xml.bind.JAXBException: class org.mumu.user.model.User nor any
of its super class is known to this context.]
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:
295)
at
com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:
221)
at
javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:
70)
at
org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder.java:
360)
at
org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:
182)



User 类是model

service 是

@WebService
public interface IUserManager {


public java.util.List<java.lang.Object> getUserLists();

public Map getUserMap();
}


实现是
@javax.jws.WebService(serviceName =
"IUserManagerService",endpointInterface =
"org.mumu.user.service.IUserManager")
public class IUserManagerImpl implements IUserManager {

private static final Logger LOG =
Logger.getLogger(IUserManagerImpl.class
.getName());

private IBaseDao baseDao;

/*
* (non-Javadoc)
*
* @see org.mumu.user.service.IUserManager#getUserLists(*
*/

public java.util.List<java.lang.Object> getUserLists() {
LOG.info("Executing operation getUserLists");
try {

String sql = "select * from t_user";

System.out.println(sql);

List list = baseDao.getLists(sql, new UserRowMapper());

System.out.println(list.size());

return list;

} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}

public Map getUserMap() {
String sql = "select * from t_user where user_id=1";
return baseDao.queryForMap(sql);
}

public class UserRowMapper implements ParameterizedRowMapper<User> {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setLoginName(rs.getString("LOGIN_NAME"));
user.setUserID(rs.getLong("USER_ID"));
user.setUserEmail(rs.getString("USER_EMAIL"));
user.setUserDate(rs.getDate("USER_DATE"));
user.setUserName(rs.getString("USER_NAME"));
user.setUserPassword(rs.getString("USER_PASSWORD"));
user.setAuthoritiesFromString(rs.getString("USER_AUTHORITY"));

return user;
}
}

public void setBaseDao(IBaseDao baseDao) {
this.baseDao = baseDao;
}

}

willem

unread,
Feb 17, 2008, 7:51:49 PM2/17/08
to cxf-zh
建议你把SEI (Service Endpoint Interface)好好改一下

public java.util.List<java.lang.Object> getUserLists();

public Map getUserMap();

这两个方法的返回参数都让JAXB 无从侍从。
要知道SEI 是帮你做Java Object 到 XML 以及 XML 到 Java Object 转换的基础。

如果是List的话,应该指定List中存放的数据类型。
如果是Map而且你是使用CXF的缺省data binding JAXB, 那你还需要写Adapter来完成。
如果你使用Agies binding 你可以直接使用Map [1]。

[1] http://cwiki.apache.org/CXF20DOC/aegis-databinding.html

姜宁 (Willem)
------------------
http://willem.bokeland.com/

9527

unread,
Feb 18, 2008, 3:44:32 AM2/18/08
to cxf-zh
谢谢willem
public java.util.List<java.lang.Object> getUserLists();
改成
public java.util.List<User> getUserLists();

但如果我想List 里面存放的是两张关联的表的数据,不知道怎么写
比如
select a.*,b.* from a,b where a.id=b.id


通过spring jdbcTemplate回List (每张表没有对应的dao,)
public List getLists(String sql) {


return getJdbcTemplate().queryForList(sql);


}


On 2月18日, 上午8时51分, willem <willem.ji...@gmail.com> wrote:
> 建议你把SEI (Service Endpoint Interface)好好改一下
>
> public java.util.List<java.lang.Object> getUserLists();
>
> public Map getUserMap();
>
> 这两个方法的返回参数都让JAXB 无从侍从。
> 要知道SEI 是帮你做Java Object 到 XML 以及 XML 到 Java Object 转换的基础。
>
> 如果是List的话,应该指定List中存放的数据类型。
> 如果是Map而且你是使用CXF的缺省data binding JAXB, 那你还需要写Adapter来完成。
> 如果你使用Agies binding 你可以直接使用Map [1]。
>
> [1]http://cwiki.apache.org/CXF20DOC/aegis-databinding.html
>
> 姜宁 (Willem)
> ------------------http://willem.bokeland.com/
>
> On 2月15日, 下午2时45分, 9527 <missyo...@gmail.com> wrote:
>
>
>
> > org.apache.cxf.interceptor.Fault: Marshalling Error: class
> > org.mumu.user.model.User nor any of its super class is known to this
> > context.
> > at
> > org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:
> > 207)
> > at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:
> > 63)
> > at
> > org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(Abs-tractOutDatabindingInterceptor.java:
> > 84)
> > at
> > org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutIntercep-tor.java:
> > 68)
> > at
> > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai-n.java:
> > 208)
> > at
> > org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingC-hainInterceptor.java:
> > 74)
> > at
> > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai-n.java:
> > 208)
> > at
> > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationO-bserver.java:
> > 77)
> > at
> > org.apache.cxf.transport.servlet.ServletDestination.doMessage(ServletDestin-ation.java:
> > 79)
> > at
> > org.apache.cxf.transport.servlet.ServletController.invokeDestination(Servle-tController.java:
> > 264)
> > at
> > org.apache.cxf.transport.servlet.ServletController.invoke(ServletController-.java:
> > 123)
> > at
> > org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServl-et.java:
> > 170)
> > at
> > org.apache.cxf.transport.servlet.AbstractCXFServlet.doGet(AbstractCXFServle-t.java:
> > 152)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> > at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio-nFilterChain.java:
> > 252)
> > at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC-hain.java:
> > 173)
> > at
> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.j-ava:
> > 213)
> > at
> > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.j-ava:
> > 178)
> > at
> > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
> > 126)
> > at
> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
> > 105)
> > at
> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.jav-a:
> > 107)
> > at
> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
> > 148)
> > at
> > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> > 869)
> > at org.apache.coyote.http11.Http11BaseProtocol
> > $Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
> > 664)
> > at
> > org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.ja-va:
> > 527)
> > at
> > org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerW-orkerThread.java:
> > 80)
> > at org.apache.tomcat.util.threads.ThreadPool
> > $ControlRunnable.run(ThreadPool.java:684)
> > at java.lang.Thread.run(Thread.java:619)
> > Caused by: javax.xml.bind.MarshalException
> > - with linked exception:
> > [javax.xml.bind.JAXBException: class org.mumu.user.model.User nor any
> > of its super class is known to this context.]
> > at
> > com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:
> > 295)
> > at
> > com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:
> > 221)
> > at
> > javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImp-l.java:
> > }- 隐藏被引用文字 -
>
> - 显示引用的文字 -

willem

unread,
Feb 21, 2008, 2:37:20 AM2/21/08
to cxf-zh
我没用用过DAO, 建议你还是对jdbcTemplate 中返回的List进行处理后再交给CXF。
这样也比较安全。

姜宁 (Willem)
------------------
http://willem.bokeland.com/

Willem Jiang

unread,
Aug 17, 2009, 10:41:35 AM8/17/09
to yysam Wang, cxf...@googlegroups.com
JAXB 对待泛型还是有些问题的, 建议你使用extension 而不是泛型来定义你的更
新接口。

姜宁 (Willem)
------------------
Apache CXF, Apache Camel committer
http://willemjiang.blogspot.com/
http://www.fusesource.org

yysam Wang wrote:
> Hello willem:
>
> I have this issue too.
> 下面是我一点简单的代码,我实在想不出来为什么Apple这个类会出问题。谢谢
>
>
> @XmlRootElement(name = "response")
> public class CRUDResponse<T extends Object> {
>
> private int total;
> private int limit;
> private int start;
> private boolean success = true;
> private T entity;
> private List<T> entityList;
>
> get...
> set...
> }
>
> error info:
>
> 2009-8-17 17:56:08 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider
> handleJAXBException
> 警告: javax.xml.bind.MarshalException


> - with linked exception:
> [javax.xml.bind.JAXBException: class

> com.ge.med.ris.admintool.apple.Apple nor any of its super class is
> known to this context.]
>
> 调用代码:
> public Response updateApple(Apple apple) throws Exception {
> apple = new AppleServiceImpl().updateApple(apple);
> return Response.ok(new CRUDResponse<Apple>(apple)).build();
> }
>
> Thanks!
> Sam

Sam.Wang

unread,
Aug 17, 2009, 9:43:07 PM8/17/09
to cxf...@googlegroups.com

Hello Willem:

谢谢你的回复!我明白你说的意思,但是如何用extension来做我有些不明白?

对我来讲,CXF的JSon对象序列化机制实在是有些死板。我很想替换掉他的序列化机制,改用我自己的Interceptor来手工序列化对象。这样我可以不用写固定的annotation或者用复杂的data
binding tools来做,请问你再这方面有什么建议么?
我看到cxf-user forum里的Sergey
谈到WADL的support,我相信如果基于CXF-RS-*的开发,在以后也会转到用WADL来定义和构建。如果我想以后迁移到标准的开发方式来,现在是否依然需要保持CXF的原有序列化组件呢?
我同样发了个详细的帖子在cxf-user forum里面,包括详细的代码和实现。Link:
http://www.nabble.com/Exception-about-%22***-nor-any-of-its-super-class-is-known-to-this-context%22-td25004234.html

Thanks!
Sam
--
View this message in context: http://www.nabble.com/Re%3A-%E5%B8%AE%E5%BF%99%E7%9C%8B%E4%B8%AA%E9%97%AE%E9%A2%98nor-any-of-its-super-class-is-known-to-this-context-tp25008036p25017119.html
Sent from the cxf-zh mailing list archive at Nabble.com.

Sam.Wang

unread,
Aug 17, 2009, 10:31:56 PM8/17/09
to cxf...@googlegroups.com

OH,
我试着看了下他的序列化实现。这个JAXRSOutInterceptor里面做的事情很多,我想简单用对象序列化的方法需要更多的代码实现,所以我放弃了。

原来的代码我试着用继承的方式来搞,虽然这样会产生很多的代码类在case by case情况下。但也想不到有更好的方法了:(
View this message in context: http://www.nabble.com/Re%3A-%E5%B8%AE%E5%BF%99%E7%9C%8B%E4%B8%AA%E9%97%AE%E9%A2%98nor-any-of-its-super-class-is-known-to-this-context-tp25008036p25017458.html

willem

unread,
Aug 17, 2009, 11:45:09 PM8/17/09
to cxf-zh
JAXB 的功能还是很强大的, 只要你定义好数据模型 ,case by case的工作很少的。


On 8月18日, 上午10时31分, "Sam.Wang" <BinB.W...@ge.com> wrote:
> OH,
> 我试着看了下他的序列化实现。这个JAXRSOutInterceptor里面做的事情很多,我想简单用对象序列化的方法需要更多的代码实现,所以我放弃了。
>
> 原来的代码我试着用继承的方式来搞,虽然这样会产生很多的代码类在case by case情况下。但也想不到有更好的方法了:(
>
>
>
> Sam.Wang wrote:
>
> > Hello Willem:
>
> > 谢谢你的回复!我明白你说的意思,但是如何用extension来做我有些不明白?
>
> > 对我来讲,CXF的JSon对象序列化机制实在是有些死板。我很想替换掉他的序列化机制,改用我自己的Interceptor来手工序列化对象。这样我可以不用 写固定的annotation或者用复杂的data
> > binding tools来做,请问你再这方面有什么建议么?
> > 我看到cxf-user forum里的Sergey
> > 谈到WADL的support,我相信如果基于CXF-RS-*的开发,在以后也会转到用WADL来定义和构建。如果我想以后迁移到标准的开发方式来,现在是否 依然需要保持CXF的原有序列化组件呢?
> > 我同样发了个详细的帖子在cxf-user forum里面,包括详细的代码和实现。Link:
> >http://www.nabble.com/Exception-about-%22***-nor-any-of-its-super-cla...
> ...
>
> 阅读更多 >>

Sam.Wang

unread,
Aug 18, 2009, 2:18:27 AM8/18/09
to cxf...@googlegroups.com

Hi Willem:

真的很感谢你的回复!我目前有些这方面的research对于CXF-RS的应用,你能提供些实际经验给我么?谢谢!

项目的一些介绍:主要是based在CXF-RS服务实现上的。前台view
layer使用静态富客户端(Extjs)来实现的,通过Ajax进行RS的访问,中间层采用JSON作为数据载体,整体用RESTful风格来实现和进行调用。业务层面上很简单,主要是实现一个配置管理的系统。没有过多的业务流程和操作,大部分的cases是进行CRUD的操作。

Thanks!
Sam
--
View this message in context: http://www.nabble.com/Re%3A-%E5%B8%AE%E5%BF%99%E7%9C%8B%E4%B8%AA%E9%97%AE%E9%A2%98nor-any-of-its-super-class-is-known-to-this-context-tp25008036p25019117.html

Sam.Wang

unread,
Aug 24, 2009, 12:11:22 AM8/24/09
to cxf...@googlegroups.com

Hello Willem:

首先谢谢你的帮助,对于JAXB序列化确实有些困难和小问题。不过Sergey提供了一个小方案,来完美的支持泛型的序列化。我相信也有很多人如果用泛型的话会遇到类似的问题,请不妨参考这个帖子的讨论和解决方案。

http://www.nabble.com/Exception-about-%22***-nor-any-of-its-super-class-is-known-to-this-context%22-td25004234.html

Thanks
Sam.
--
View this message in context: http://www.nabble.com/Re%3A-%E5%B8%AE%E5%BF%99%E7%9C%8B%E4%B8%AA%E9%97%AE%E9%A2%98nor-any-of-its-super-class-is-known-to-this-context-tp25008036p25110316.html
Reply all
Reply to author
Forward
0 new messages