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

View: New views
6 Messages — Rating Filter:   Alert me  

Parent Message unknown Re: 帮忙看个问题nor any of its super class is known to this context

by willem.jiang :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


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
>
> On 2008年2月18日, 上午8时51分, willem <willem.ji...@...> 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...@...> 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:
>>> 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;
>>>         }
>>> }
>


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“cxf-zh”论坛。
 要在此论坛发帖,请发电子邮件到 cxf-zh@...
 要退订此论坛,请发邮件至 cxf-zh-unsubscribe@...
 更多选项,请通过 http://groups.google.com/group/cxf-zh?hl=zh-CN 访问该论坛
----
Apache CXF 首页 http://cwiki.apache.org/confluence/display/CXF/Index
-~----------~----~----~----~------~----~------~--~---


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

by Sam.Wang :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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

willem.jiang wrote:
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
>
> On 2008年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:
>>> 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;
>>>         }
>>> }
>


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“cxf-zh”论坛。
 要在此论坛发帖,请发电子邮件到 cxf-zh@googlegroups.com
 要退订此论坛,请发邮件至 cxf-zh-unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/cxf-zh?hl=zh-CN 访问该论坛
----
Apache CXF 首页 http://cwiki.apache.org/confluence/display/CXF/Index
-~----------~----~----~----~------~----~------~--~---

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

by Sam.Wang :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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

原来的代码我试着用继承的方式来搞,虽然这样会产生很多的代码类在case by case情况下。但也想不到有更好的方法了:(



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

willem.jiang wrote:
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
>
> On 2008年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:
>>> 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;
>>>         }
>>> }
>


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“cxf-zh”论坛。
 要在此论坛发帖,请发电子邮件到 cxf-zh@googlegroups.com
 要退订此论坛,请发邮件至 cxf-zh-unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/cxf-zh?hl=zh-CN 访问该论坛
----
Apache CXF 首页 http://cwiki.apache.org/confluence/display/CXF/Index
-~----------~----~----~----~------~----~------~--~---


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

by willem.jiang :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


JAXB 的功能还是很强大的, 只要你定义好数据模型 ,case by case的工作很少的。


On 8月18日, 上午10时31分, "Sam.Wang" <BinB.W...@...> 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...
>
> >    Thanks!
> >    Sam
>
> > willem.jiang wrote:
>
> >> 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
>
> >>> On 2008年2月18日, 上午8时51分, willem <willem.ji...@...> 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...@...> 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:
> >>>>> 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> {
>
> ...
>
> 阅读更多 >>
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“cxf-zh”论坛。
 要在此论坛发帖,请发电子邮件到 cxf-zh@...
 要退订此论坛,请发邮件至 cxf-zh-unsubscribe@...
 更多选项,请通过 http://groups.google.com/group/cxf-zh?hl=zh-CN 访问该论坛
----
Apache CXF 首页 http://cwiki.apache.org/confluence/display/CXF/Index
-~----------~----~----~----~------~----~------~--~---


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

by Sam.Wang :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Willem:

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

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

Thanks!
Sam

willem.jiang wrote:
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...
>
> >    Thanks!
> >    Sam
>
> > willem.jiang wrote:
>
> >> 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
>
> >>> On 2008年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:
> >>>>> 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> {
>
> ...
>
> 阅读更多 >>
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“cxf-zh”论坛。
 要在此论坛发帖,请发电子邮件到 cxf-zh@googlegroups.com
 要退订此论坛,请发邮件至 cxf-zh-unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/cxf-zh?hl=zh-CN 访问该论坛
----
Apache CXF 首页 http://cwiki.apache.org/confluence/display/CXF/Index
-~----------~----~----~----~------~----~------~--~---

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

by Sam.Wang :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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.

willem.jiang wrote:
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
>
> On 2008年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:
>>> 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;
>>>         }
>>> }
>


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“cxf-zh”论坛。
 要在此论坛发帖,请发电子邮件到 cxf-zh@googlegroups.com
 要退订此论坛,请发邮件至 cxf-zh-unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/cxf-zh?hl=zh-CN 访问该论坛
----
Apache CXF 首页 http://cwiki.apache.org/confluence/display/CXF/Index
-~----------~----~----~----~------~----~------~--~---