2010-03-21 2 views
1

Я хочу сделать динамический веб-сервис invoker в JSF с CXF. Но когда я загружаю этот простой код, я получаю ошибку. Код:Почему я получаю эту ошибку в CXF

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

Ошибка:

Нет сконфигурированные для этого приложения фабрики. Это происходит, если инициализация лиц не работает вообще - убедитесь, что вы правильно включили все параметры конфигурации, необходимые для приложения основных лиц, и что все необходимые библиотеки включены. Также проверьте выходные данные вашего веб-приложения и вашего контейнера для любых исключений! Если вы это сделали и ничего не нашли, ошибка может быть связана с тем, что вы используете специальные веб-контейнеры, которые не поддерживают регистрацию контекстно-прослушивателей через файлы TLD, и слушатель контекста не настроен в вашем web.xml. Типичная конфигурация выглядит так: org.apache.myfaces.webapp.StartupServletContextListener

Вызвано: java.lang.IllegalStateException - нет фабрик, настроенных для этого приложения. Это происходит, если инициализация лиц не работает вообще - убедитесь, что вы правильно включили все параметры конфигурации, необходимые для приложения основных лиц, и что все необходимые библиотеки включены. Также проверьте выходные данные вашего веб-приложения и вашего контейнера для любых исключений! Если вы это сделали и ничего не нашли, ошибка может быть связана с тем, что вы используете специальные веб-контейнеры, которые не поддерживают регистрацию контекстно-прослушивателей через файлы 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 INFO: Созданные классы: 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. Устранение неполадок. com.strikeiron.rus.narod.ru, com.strikeiron.DNSInfo, com.strikeiron.DNSLookup, com. Устранение неполадок. com.strikeiron.DNSInfo, com.strikeiron.DNSLookup, com. strikeiron.DNSInfo, com.strikeiron.DNSLookup, 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.SIWsOutputOfSIWsResultArrayOfSer viceInfoRecord, com.strikeiron.SIWsResultArrayOfMethodStatusRecord, com.strikeiron.SIWsResultArrayOfSIWsStatus, com.strikeiron.SIWsResultArrayOfServiceInfoRecord, com.strikeiron.SIWsStatus, com.strikeiron.ServiceInfoRecord JE замедленное 22.3.2010 15:00:13 javax.faces.webapp._ErrorPageWriter handleThrowable SEVERE: Произошло исключение java.lang.IllegalStateException: для этого приложения не созданы фабрики.Это происходит, если инициализация лиц не работает вообще - убедитесь, что вы правильно включили все параметры конфигурации, необходимые для приложения основных лиц, и что все необходимые библиотеки включены. Также проверьте выходные данные вашего веб-приложения и вашего контейнера для любых исключений! Если вы это сделали и ничего не нашли, ошибка может быть связана с тем, что вы используете специальные веб-контейнеры, которые не поддерживают регистрацию контекстных прослушивателей через файлы 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> 
+0

показать нам 'рожу-config.xml 'и' web.xml' – Bozho

+0

Я добавляю также faces-config.xml и web.xml. Hm ... Im уже 2 дня пытается решить эту проблему – Milan

+0

есть ли какие-либо другие исключения/ошибки в файлах журнала? Например, «NoClassDefFound», например – Bozho

ответ

0

ошибки вы цитируете не имеют ничего общего с CXF, а с org.apache.myfaces ,

Если все, что вернулось с сервера, то у вас есть неправильный URL-адрес для wsdl. Просматривает ли этот URL-адрес WSDL-файл в обычном браузере?

Возможно, вы получите более эффективную помощь по отладке в списке рассылки пользователей CXF. Это не столько вопрос, сколько диагностическая проблема, которая займет много времени и сил.

+0

. Wsdl? url в порядке. В обычном браузере я вижу документ WSDL. Возможно, проблема в myFaces. Но где ... У меня нет идеи. – Milan

1

Для того, чтобы избежать некоторых ошибок, как «Нет Фабрики сконфигурированных для этого приложения» с помощью динамического клиента 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); 
Смежные вопросы