为什么我在CXF中出现此错误

时间:2010-03-21 23:21:19

标签: java web-services cxf

我想用JSF在JSF中创建动态Web服务调用程序。但是当我加载这个简单的代码时,我得到错误。 代码:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://ws.strikeiron.com/IPLookup2?wsdl");

错误:

没有为此应用程序配置工厂。如果faces-initialization完全不起作用,则会发生这种情况 - 请确保正确包含基本面应用程序所需的所有配置设置,并且包含所有必需的lib。还要检查Web应用程序和容器的日志记录输出是否有异常!如果你这样做并且一无所获,那么错误可能是因为您使用了一些特殊的Web容器,这些容器不支持通过TLD文件注册上下文侦听器,并且您的web.xml中没有设置上下文侦听器。典型的配置看起来像这样; org.apache.myfaces.webapp.StartupServletContextListener

引起: java.lang.IllegalStateException - 没有为此应用程序配置的工厂。如果faces-initialization完全不起作用,则会发生这种情况 - 请确保正确包含基本面应用程序所需的所有配置设置,并且包含所有必需的lib。还要检查Web应用程序和容器的日志记录输出是否有异常!如果你这样做并且一无所获,那么错误可能是因为您使用了一些特殊的Web容器,这些容器不支持通过TLD文件注册上下文侦听器,并且您的web.xml中没有设置上下文侦听器。典型的配置看起来像这样; org.apache.myfaces.webapp.StartupServletContextListener

任何想法如何解决问题?

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ServiceInvoker</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <description>
    This parameter tells MyFaces if javascript code should be allowed in
    the rendered HTML output.
    If javascript is allowed, command_link anchors will have javascript code
    that submits the corresponding form.
    If javascript is not allowed, the state saving info and nested parameters
    will be added as url parameters.
    Default is 'true'</description>
    <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <description>
    If true, rendered HTML code will be formatted, so that it is 'human-readable'
    i.e. additional line separators and whitespace will be written, that do not
    influence the HTML code.
    Default is 'true'</description>
    <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <description>
    If true, a javascript function will be rendered that is able to restore the
    former vertical scroll on every request. Convenient feature if you have pages
    with long lists and you do not want the browser page to always jump to the top
    if you trigger a link or button action that stays on the same page.
    Default is 'false'
</description>
    <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
    <param-value>true</param-value>
  </context-param>
  <listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  </listener>
</web-app>

面-config.xml中

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
    version="1.2">
    <managed-bean>
        <description>Bean used for invoking services</description>
        <managed-bean-name>invoker</managed-bean-name>
        <managed-bean-class>org.cot.invoker.Invoker</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

</faces-config>

这是我在Eclipse的控制台中获得的内容:

22.3.2010 15:00:11 org.apache.cxf.endpoint.dynamic.DynamicClientFactory outputDebug 信息:创建的类:com.strikeiron.ws.GetRemainingHits,com.strikeiron.ws.GetRemainingHitsResponse,com.strikeiron.ws.LicenseInfo,com.strikeiron.ws.ObjectFactory,com.strikeiron.ws.RegisteredUser,com.strikeiron.ws .SubscriptionInfo,com.strikeiron.ws.UnregisteredUser,com.strikeiron.ArrayOfMethodStatusRecord,com.strikeiron.ArrayOfSIWsStatus,com.strikeiron.ArrayOfServiceInfoRecord,com.strikeiron.ArrayOfString,com.strikeiron.ArrayOfString1,com.strikeiron.DNSInfo,com.strikeiron .DNSLookup,com.strikeiron.DNSLookupResponse,com.strikeiron.GetServiceInfo,com.strikeiron.GetServiceInfoResponse,com.strikeiron.GetStatusCodes,com.strikeiron.GetStatusCodesForMethod,com.strikeiron.GetStatusCodesForMethodResponse,com.strikeiron.GetStatusCodesResponse,com.strikeiron.MethodStatusRecord ,com.strikeiron.ObjectFactory,com.strikeiron.SIWsOutputOfDNSInfo,com.strikeiron.SIWsOutputOfMethodStatusRecord,com.strikeiron.SIWsOutputOfSIWsResultArrayOfMethodStatusRecord,com.strikeiron.SIWsOutput OfSIWsResultArrayOfServiceInfoRecord,com.strikeiron.SIWsResultArrayOfMethodStatusRecord,com.strikeiron.SIWsResultArrayOfSIWsStatus,com.strikeiron.SIWsResultArrayOfServiceInfoRecord,com.strikeiron.SIWsStatus,com.strikeiron.ServiceInfoRecord je slo 22.3.2010 15:00:13 javax.faces.webapp._ErrorPageWriter handleThrowable 严重:发生了异常 java.lang.IllegalStateException:没有为此应用程序配置的工厂。如果faces-initialization完全不起作用,则会发生这种情况 - 请确保正确包含基本面应用程序所需的所有配置设置,并且包含所有必需的lib。还要检查Web应用程序和容器的日志记录输出是否有异常! 如果你这样做并且一无所获,那么错误可能是因为您使用了一些特殊的Web容器,这些容器不支持通过TLD文件注册上下文侦听器,并且您的web.xml中没有设置上下文侦听器。 典型的配置看起来像这样;   org.apache.myfaces.webapp.StartupServletContextListener

at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:106)
at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:356)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:155)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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:852)
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(Unknown Source)

当我点击:

<h:commandLink value="Invoke me!" actionListener="#{invoker.doInvoke}"></h:commandLink>

2 个答案:

答案 0 :(得分:1)

为了避免某些错误,例如&#34;没有为此应用程序配置的工厂&#34;使用CXF动态客户端和JSF,您必须执行以下操作:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://ws.strikeiron.com/IPLookup2?wsdl");
Thread.currentThread().setContextClassLoader(classLoader);

答案 1 :(得分:0)

您引用的错误与CXF无关,而是与org.apache.myfaces无关。

如果从服务器返回所有内容,那么你的网址是错误的?wsdl。浏览该URL是否在普通浏览器中生成WSDL文件?

您可以在CXF用户邮件列表上获得更好的调试帮助。这不是一个问题,而是一个需要大量来回的诊断问题。