首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩展不在项目中的类

如何扩展不在项目中的类
EN

Stack Overflow用户
提问于 2012-09-15 03:39:45
回答 2查看 1.2K关注 0票数 0

我正在尝试为xwiki编写一个custom authentication类。

我有一个在其中编写了身份验证机制的项目,如果有人尝试访问xwiki,我希望它使用xwiki自定义身份验证将他们重定向到我的项目的登录页面。

我正在尝试从我的项目和xwiki中分离出一个类,将其打包为jar,并将其放入xwiki项目的xwiki WEB-INF/lib文件夹中,因为这就是xwiki自定义身份验证的说明。

问题是,我需要编写的类导入了一些xwiki类。如果我用这些导入编写一个单独的类,它将不能正确编译。

如果一个单独的类需要放到xwiki的WEB-INF/lib文件夹中,我该如何创建一个扩展某些xwiki类的类呢?

这是一个有人发布https://www.box.com/shared/9kamt5d9c5的例子。

简单的例子

代码语言:javascript
复制
package my.xwiki.custom.authentication;

import java.io.*;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.user.api.XWikiUser;
import com.xpn.xwiki.user.impl.xiki.XWikiAuthServiceImpl;


public class XWikiSSOImpl extends XWikiAuthServiceImpl {

    @Override
    public XWikiUser checkAuth(XWikiContext context) throws XWikiException {
        System.out.println("we actually in checkAuth?");
    }
}

当我将jar文件添加到我的xwiki并运行它时,我得到以下错误:

代码语言:javascript
复制
Detailed information:

    Error number 0 in 11: Uncaught exception
Wrapped Exception: Unresolved compilation problems: 
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    XWikiAuthServiceImpl cannot be resolved to a type
    XWikiUser cannot be resolved to a type
    XWikiContext cannot be resolved to a type
    XWikiException cannot be resolved to a type

com.xpn.xwiki.XWikiException: Error number 0 in 11: Uncaught exception
Wrapped Exception: Unresolved compilation problems: 
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    XWikiAuthServiceImpl cannot be resolved to a type
    XWikiUser cannot be resolved to a type
    XWikiContext cannot be resolved to a type
    XWikiException cannot be resolved to a type

    at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:254)
    at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:116)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:120)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.xwiki.wysiwyg.server.filter.ConversionFilter.doFilter(ConversionFilter.java:144)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.xpn.xwiki.plugin.webdav.XWikiDavFilter.doFilter(XWikiDavFilter.java:66)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
    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: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:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.Error: Unresolved compilation problems: 
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    The import com.xpn cannot be resolved
    XWikiAuthServiceImpl cannot be resolved to a type
    XWikiUser cannot be resolved to a type
    XWikiContext cannot be resolved to a type
    XWikiException cannot be resolved to a type

    at my.xwiki.custom.authentication.XWikiSSOImpl <init>(XWikiSSOImpl.java:4)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:355)
    at java.lang.Class.newInstance(Class.java:308)
    at com.xpn.xwiki.XWiki.getAuthService(XWiki.java:5288)
    at com.xpn.xwiki.XWiki.checkAuth(XWiki.java:4090)
    at com.xpn.xwiki.user.impl.xwiki.XWikiRightServiceImpl.checkAccess(XWikiRightServiceImpl.java:205)
    at com.xpn.xwiki.XWiki.checkAccess(XWiki.java:4103)
    at com.xpn.xwiki.XWiki.prepareDocuments(XWiki.java:5128)
    at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:179)
    ... 34 more
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-15 04:08:57

根据提供的链接,您似乎没有遗漏任何导入,并且假设您没有任何明显的语法错误,那么它将指向您的开发环境。典型的解决方案是使用包的路径设置CLASSPATH变量,但根据我的经验,这很容易出错。

如果您使用的是Eclipse,请右键单击您的项目名称并选择属性。在属性对话框中,单击左侧的“Java Build Path”。在“Java Build Path”属性中,单击Libraries选项卡。你想点击'Add an External Jar...‘按钮,您将在其中指定xwiki jar的路径。

票数 2
EN

Stack Overflow用户

发布于 2012-09-15 03:59:59

要编译一个类,编译器需要所有引用类(包括超类)的定义。它既可以使用已经编译的类(作为.class文件或从JAR文件),也可以从源代码编译这些类。因为您不想编译xwiki类,所以需要编译前者。

因此,您需要将包含这些类的jar文件添加到类路径中。如何做到这一点取决于您如何调用编译器或使用哪种IDE。使用eclipse,您可以右键单击项目-> Build Path -> Add External Archives。对于javac,您可以使用-cp选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12430953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档