Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t让CXF JAX-RS和JSF一起工作_Jsf_Cxf_Jax Rs_Apache Tomee_Facesservlet - Fatal编程技术网

Can';t让CXF JAX-RS和JSF一起工作

Can';t让CXF JAX-RS和JSF一起工作,jsf,cxf,jax-rs,apache-tomee,facesservlet,Jsf,Cxf,Jax Rs,Apache Tomee,Facesservlet,我正在尝试设置一个使用CXF JAX-RS和JSF的小示例应用程序FooTest。我从CXF部分开始,实现了一个简单的服务(works)和一个名为home.html的小html页面(我可以在浏览器中访问它)。有关守则如下: web.xml <servlet> <servlet-name>RestServlet</servlet-name> <servlet-class>org.apache.cxf.jaxrs.servlet.CXF

我正在尝试设置一个使用CXF JAX-RS和JSF的小示例应用程序
FooTest
。我从CXF部分开始,实现了一个简单的服务(works)和一个名为home.html的小html页面(我可以在浏览器中访问它)。有关守则如下:

web.xml

<servlet>
    <servlet-name>RestServlet</servlet-name>
    <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
    <init-param>
        <param-name>jaxrs.serviceClasses</param-name>
        <param-value>com.test.FooService</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>RestServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
... CXF stuff ...
<?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_2_1.xsd"
    version="2.1">

</faces-config>
现在我可以调用
http://localhost:8080/FooTest/rest/foo
http://localhost:8080/FooTest/home.html
。但是,当我开始定义并将
FacesServlet
映射到
*.html
并尝试访问
home.html
时,我会得到一个
NullPointerException

新建web.xml

<servlet>
    <servlet-name>RestServlet</servlet-name>
    <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
    <init-param>
        <param-name>jaxrs.serviceClasses</param-name>
        <param-value>com.test.FooService</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>RestServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
... CXF stuff ...
<?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_2_1.xsd"
    version="2.1">

</faces-config>
我怎样才能解决这个问题

更新-更多配置信息 该应用程序在TomEE 1.5.2的JAX-RS版本上运行

src/main/webapp/WEB-INF/faces config.xml

<servlet>
    <servlet-name>RestServlet</servlet-name>
    <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
    <init-param>
        <param-name>jaxrs.serviceClasses</param-name>
        <param-value>com.test.FooService</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>RestServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
... CXF stuff ...
<?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_2_1.xsd"
    version="2.1">

</faces-config>

不确定这是评论还是回答,但您不应该在web.xml中设置
CXFNonSpringJaxrsServlet
FacesServlet
,所有这些内容都已准备就绪。TomEE的目标是,您可以跳过服务器构建,直接进入应用构建

CXF完全集成到Tomcat中,甚至WS-Security也可以在Tomcat领域工作。您只需添加
@ApplicationPath
注释的组件或用
@Path
注释的EJB即可开始使用它,它们将被自动拾取和部署


MyFaces很好用,并且与CDI完全集成,因此即使是像
@ConversationScoped
这样的东西也可以开箱即用。你只需要你的
faces config.xml
或一些
@ManagedBean
类。

不确定这是评论还是回答,但你不应该在你的web.xml中设置
CXFNonSpringJaxrsServlet
FacesServlet
,所有这些东西都已经准备好了。TomEE的目标是,您可以跳过服务器构建,直接进入应用构建

CXF完全集成到Tomcat中,甚至WS-Security也可以在Tomcat领域工作。您只需添加
@ApplicationPath
注释的组件或用
@Path
注释的EJB即可开始使用它,它们将被自动拾取和部署


MyFaces很好用,并且与CDI完全集成,因此即使是像
@ConversationScoped
这样的东西也可以开箱即用。你只需要你的
faces-config.xml
或一些
@ManagedBean
类。

你的faces-config.xml在哪里?在
src/main/webapp/WEB-INF
中,也请发布faces-config.xml。你的faces-config.xml在哪里?在
src/main/webapp/WEB-INF
中,也请发布faces-config.xml。我刚开始讨厌CXF,因为它凌乱的文档和从Spring特性继承的配置开销。我花了一些时间才弄明白,我首先需要什么部件才能使它工作。但这是个好消息!刚刚尝试使用一个空的
web.xml
,现在它可以工作了。我想我必须将我的
.xhtml
文件重命名为
.html
.xhtml
不起作用),但这没关系。也许您可以在示例和文档中明确提到这一无需配置的内容?无论如何,非常感谢。我可能在JSF方面错了,FacesServet可能只用于启用xhtml的目的。您肯定可以做到,我们今天刚刚添加了一个示例,可以做到这一点,但JSF一般不需要。欢迎您随时提供有关文档的帮助!所有页面的右上角都有一个蓝色铅笔图标。点击它,你可以编辑页面并提交一种“拉请求”好吧,我有点太快了。我的示例页面出现了,但没有呈现JSF标记。实际解决方案:CXF配置不是必需的,与问题无关(这很好)。当您希望通过
.html
访问
.xhtml
JSF页面时,需要使用FacesServlet映射。我的示例的问题是,我将我的页面命名为
home.html
,但
javax.faces.DEFAULT\u后缀是
.xhtml
。除非更改后缀,否则不能使用
.html
.Oh。我刚开始讨厌CXF,因为它凌乱的文档和从Spring特性继承的配置开销。我花了一些时间才弄明白,我首先需要什么部件才能使它工作。但这是个好消息!刚刚尝试使用一个空的
web.xml
,现在它可以工作了。我想我必须将我的
.xhtml
文件重命名为
.html
.xhtml
不起作用),但这没关系。也许您可以在示例和文档中明确提到这一无需配置的内容?无论如何,非常感谢。我可能在JSF方面错了,FacesServet可能只用于启用xhtml的目的。您肯定可以做到,我们今天刚刚添加了一个示例,可以做到这一点,但JSF一般不需要。欢迎您随时提供有关文档的帮助!所有页面的右上角都有一个蓝色铅笔图标。点击它,你可以编辑页面并提交一种“拉请求”好吧,我有点太快了。我的示例页面出现了,但没有呈现JSF标记。实际解决方案:CXF配置不是必需的,与问题无关(这很好)。当您希望通过
.html
访问
.xhtml
JSF页面时,需要使用FacesServlet映射。我的示例的问题是,我将我的页面命名为
home.html
,但
javax.faces.DEFAULT\u后缀是
.xhtml
。除非更改后缀,否则不能使用
.html