项目代码过多,不能贴出来。大致描述下,本来是SSH框架的项目,现在要加入web services。加入了xfire和其他的jar包,项目架构上没有问题了。应该不会出现少包的情况,我在做读web services 的WSDL文件时出现了问题。也在网上找了。没解决。
问题如下:
2009-12-22 17:05:38,671 [ERROR][XFireServletController.java:134] Couldn't invoke servlet request.
org.codehaus.xfire.XFireRuntimeException: Couldn't create type for property definedFilterNames on interface org.hibernate.SessionFactory: Cannot create mapping for java.util.Set, unspecified component type for interface java.util.Set
at org.codehaus.xfire.aegis.type.DefaultTypeCreator.createCollectionType(DefaultTypeCreator.java:43)
at org.codehaus.xfire.aegis.type.java5.Java5TypeCreator.createCollectionType(Java5TypeCreator.java:139)
at org.codehaus.xfire.aegis.type.XMLTypeCreator.createCollectionType(XMLTypeCreator.java:116)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createTypeForClass(AbstractTypeCreator.java:113)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createType(AbstractTypeCreator.java:396)
at org.codehaus.xfire.aegis.type.XMLTypeCreator.createTypeFromGeneric(XMLTypeCreator.java:325)
at org.codehaus.xfire.aegis.type.XMLTypeCreator.getOrCreateGenericType(XMLTypeCreator.java:312)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createCollectionTypeFromGeneric(AbstractTypeCreator.java:227)
at org.codehaus.xfire.aegis.type.XMLTypeCreator.createCollectionType(XMLTypeCreator.java:113)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createTypeForClass(AbstractTypeCreator.java:113)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createType(AbstractTypeCreator.java:376)
at org.codehaus.xfire.aegis.type.basic.BeanTypeInfo.getType(BeanTypeInfo.java:205)
at org.codehaus.xfire.aegis.type.basic.BeanType.getType(BeanType.java:609)
at org.codehaus.xfire.aegis.type.basic.BeanType.writeSchema(BeanType.java:530)
at org.codehaus.xfire.wsdl.AbstractWSDL.addDependency(AbstractWSDL.java:230)
at org.codehaus.xfire.wsdl.AbstractWSDL.addDependency(AbstractWSDL.java:239)
at org.codehaus.xfire.wsdl.AbstractWSDL.addDependency(AbstractWSDL.java:239)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilder.writeParametersSchema(WSDLBuilder.java:638)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilder.createDocumentType(WSDLBuilder.java:612)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilder.createWrappedOutputParts(WSDLBuilder.java:594)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilder.createOutputMessage(WSDLBuilder.java:337)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilder.createAbstractInterface(WSDLBuilder.java:243)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilder.write(WSDLBuilder.java:161)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilderAdapter.write(WSDLBuilderAdapter.java:40)
at org.codehaus.xfire.DefaultXFire.generateWSDL(DefaultXFire.java:104)
at org.codehaus.xfire.transport.http.XFireServletController.generateWSDL(XFireServletController.java:380)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:125)
at org.codehaus.xfire.spring.remoting.XFireServletControllerAdapter.handleRequest(XFireServletControllerAdapter.java:67)
at org.codehaus.xfire.spring.remoting.XFireExporter.handleRequest(XFireExporter.java:48)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:416)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
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:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
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:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
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:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
2009-12-22 17:05:38 org.apache.catalina.core.StandardWrapperValve invoke虽然知道是 aegis.xml配置文件的问题。但是这里的 Couldn't create type for property definedFilterNames on interface org.hibernate.SessionFactory: Cannot create mapping for java.util.Set, unspecified component type for interface java.util.Set 却是无能为力啊。下面给出 做services的class 和 BaseBiz.aegis.xml
public interface BaseBiz {    public BaseDAO getBaseDAO();//这里的BaseDao是一个abstract class ,继承自 HibernateDaoSupport    public Integer save(BaseVO entity);    public List<BaseVO> query();}
BaseBiz.aegis.xml:
  <mappings>
 
         <mapping>
            <method name="getBaseDao" ignore="true">
            </method>
         </mapping>
 </mappings>另外:BaseBiz.aegis.xml是默认绑定的吧?不需要在配置文件里配置吧?没多少分。麻烦各位大大了。

解决方案 »

  1.   

    Xfairs的Java对象类型需要aegis文件进行支持,楼主自己写一个List.aegis.xml文件,然后写上下面内容:<?xml version="1.0" encoding="UTF-8"?>
    <mappings>
    <mapping>
    <method name="translate">
    <return-type componentType="java.util.List"/>
    </method>
    </mapping>
    </mappings>然后把文件放在需要用到的地方就可以解决问题。
      

  2.   

    谢谢解答,我会去试试的。但是,似乎这个问题涉及到 SessionFactory中的一个属性:definedFilterNames,并且异常说是set的问题。 我将试试你给出的答案。谢谢!
      

  3.   

    由于用到了Hibernate Struts2 和Spring,所以像 SessionFactory 这些都是由Hibernate和Spring来管理的。我也知道要使用 aegis.xml 配置文件。问题的关键是SessionFactory 不是自己的实现类。他是jar包中的类。不可能对他的返回类型进行配置啊。
      

  4.   

    webService。我用过axis2,没用过xfire,但是基本逻辑是一样的,对于自动生成的代码会有异常包围,所以,不一定自动生成的代码也是正确的,这样你要自己生成一个服务端和一个客户端,对其进行测试!
      

  5.   

    已经很久不这样写webService了
    强烈建议lz使用xstream,这样,webservice交换的是xml格式的字符串,而且是对象类型的