Jakarta ee eclipselink PersistenceUnitLoadingEception在WAR文件中?

Jakarta ee eclipselink PersistenceUnitLoadingEception在WAR文件中?,jakarta-ee,websphere,eclipselink,websphere-8,websphere-liberty,Jakarta Ee,Websphere,Eclipselink,Websphere 8,Websphere Liberty,我得到了一个与这个问题极其相似的错误: 我正在WAS Liberty Profile V8.5上部署 但是,当将我的项目导出到WAR文件时;我没有改变包装的选择。我不确定是什么错了,以及包装风格之间的区别是什么。即使如此……我的所有依赖项jar文件都在server.xml中指定的目录中,所以我很困惑 错误: [ERROR ] SRVE0321E: The [websphere.jaxrs.filters.ProjectAccessFilter] filter did not load dur

我得到了一个与这个问题极其相似的错误:

我正在WAS Liberty Profile V8.5上部署

但是,当将我的项目导出到WAR文件时;我没有改变包装的选择。我不确定是什么错了,以及包装风格之间的区别是什么。即使如此……我的所有依赖项jar文件都在server.xml中指定的目录中,所以我很困惑

错误:

[ERROR   ] SRVE0321E: The [websphere.jaxrs.filters.ProjectAccessFilter] filter did not load during start up.
SRVE0320E: The [websphere.jaxrs.filters.ProjectAccessFilter] filter was found, but a resource injection failure has occurred.
[ERROR   ] SRVE0321E: The [websphere.jaxrs.filters.AuthorizationFilter] filter did not load during start up.
SRVE0320E: The [websphere.jaxrs.filters.AuthorizationFilter] filter was found, but a resource injection failure has occurred.
[ERROR   ] SRVE0315E: An exception occurred: com.ibm.ws.webcontainer.webapp.WebAppErrorReport: javax.servlet.ServletException: SRVE0320E: The [websphere.jaxrs.filters.AuthorizationFilter] filter was found, but a resource injection failure has occurred.
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:615)
    at [internal classes]
Caused by: javax.servlet.ServletException: SRVE0320E: The [websphere.jaxrs.filters.AuthorizationFilter] filter was found, but a resource injection failure has occurred.
    ... 3 more
Caused by: com.ibm.wsspi.injectionengine.InjectionException: java.lang.reflect.InvocationTargetException
    at com.ibm.ws.webcontainer.webapp.WebApp.validateAndRun(WebApp.java:860)
    ... 1 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.ibm.ws.webcontainer.webapp.WebApp.validateAndRun(WebApp.java:847)
    ... 1 more
Caused by (repeated) ... : Exception [EclipseLink-30009] (Eclipse Persistence Services - 2.5.2.v20140222-22988a5): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while trying to load persistence unit at url: jar:file:/C:/wlp/usr/servers/dropServer/apps/WebApiConsole.war!/
Internal Exception: Exception [EclipseLink-30004] (Eclipse Persistence Services - 2.5.2.v20140222-22988a5): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while processing persistence.xml from URL: jar:file:/C:/wlp/usr/servers/dropServer/apps/WebApiConsole.war!/
Internal Exception: java.net.MalformedURLException
    ... 12 more
Caused by: java.net.MalformedURLException
    at java.net.URL.<init>(URL.java:619)
    at java.net.URL.<init>(URL.java:482)
    at java.net.URL.<init>(URL.java:431)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:610)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
    at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceXML(PersistenceUnitProcessor.java:636)
    ... 10 more
Caused by: java.lang.NullPointerException
    at java.net.URL.<init>(URL.java:524)
解压war文件时,persistence.xml文件的位置为: WEB-INF/classes/META-INF/persistence.xml 还有:/META-INF/MANIFEST.MF

我不确定这是否会产生影响,或者告诉eclipse停止制作这个额外的META-INF文件夹

有趣的是,当我简单地构建我的项目并使用.xml扩展来引用我的类时,它工作得非常好!注意,当您只需按“在服务器上运行”时,这是默认方式

WebApiConsole.war.xml:

<?xml version="1.0" encoding="UTF-8"?>
<archive>
    <dir sourceOnDisk="C:\eclipse\workspace\WebApiConsole\WebContent" targetInArchive="/"/>
    <dir sourceOnDisk="C:\eclipse\workspace\WebApiConsole\WebContent\WEB-INF\classes" targetInArchive="/WEB-INF/classes"/>
</archive>
以下是筛选文件:

@WebFilter(description = "This filter intercepts all requests to the restful"
        + "webservice and checks whether the user is in the database", urlPatterns = { "/rest/*" })
public class AuthorizationFilter implements Filter {

    private static final String identifierCookieDomain = "null";
    private static final String identifierCookieName = "UID";
    private EntityManager em;

    public AuthorizationFilter() {}

    @PostConstruct
    public void init() {
        em = Persistence.createEntityManagerFactory("ConsoleManagement").createEntityManager();
    }

    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
        Cookie[] cookies;
        String uid = null;

        cookies = ((HttpServletRequest) request).getCookies();
        if ( cookies == null ) {
            ((HttpServletResponse) response).sendError(401, "Unauthorized Access: Please login");
        } else {

            uid = getCookie(request, identifierCookieDomain, identifierCookieName);

            if ( uid == null || !userExists(uid)) {
                ((HttpServletResponse) response).sendError(401, "Unauthorized Access: Please login");
            } else {
                chain.doFilter(request, response);
            }   
        }
    }

    public boolean userExists(String uid) {
        List<User> users = em.createNamedQuery("User.queryUserByUid", User.class)
                .setParameter("uid", uid)
                .getResultList();
        if (users.size() == 0) return false;
        return true;
    }

    public String getCookie(ServletRequest request, String domain, String name) {
        String value = null;
        Cookie[] cookies = ((HttpServletRequest) request).getCookies();
        for(Cookie cookie : cookies) {
            String cookieDomain = cookie.getDomain() == null ? "null" : cookie.getDomain();
            String cookieName = cookie.getName() == null ? "null" : cookie.getName();
            if ( cookieDomain.equals(domain) &&
                    cookieName.equals(name) ) {
                value = cookie.getValue();
                break;
            }
        }
        return value;
    }

    public void init(FilterConfig fConfig) throws ServletException {}

    @Override
    public void destroy() { }

}

这看起来像一只食虫。你能在邮件列表上贴些东西吗?我会在那边跟你联络

[更新]

调试该问题后,WebSphereLiberty中的问题已在中修复


[/Update]

您是在Liberty beta版中使用jpa-2.1,还是自己打包EclipseLink并在特定Liberty版本中使用jpa-2.0?哪个版本显示在messages.log的顶部?我已经打开了jpa-2.1功能。很抱歉,在messages.log顶部找不到版本。根据要求,我发布了该问题。我还没有在列表中看到它。。。我想你必须先订阅才能发布。很有趣。。。我会订阅的。完成。很抱歉,gmail将失败过滤到了促销活动中