简体   繁体   English

ContentModel无法解析为变量

[英]ContentModel cannot be resolved to a variable

I'm having this error : 我遇到这个错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    ContentModel cannot be resolved to a variable

    at test2CMIS.Test.main(Test.java:39)" 

And I dont understand from where it comes, here is my code : 而且我不明白它来自哪里,这是我的代码:

public class Test {

    public static void main(String[] args){
        Test atest = new Test();
        Session session = atest.iniSession();
        AuthenticationService authenticationService=null;
        PersonService personService = null;

        if (authenticationService.authenticationExists("test") == false)
        {
           authenticationService.createAuthentication("test", "changeMe".toCharArray());

           PropertyMap ppOne = new PropertyMap(4);
           ppOne.put(ContentModel.PROP_USERNAME, "test");
           ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName");
           ppOne.put(ContentModel.PROP_LASTNAME, "lastName");
           ppOne.put(ContentModel.PROP_EMAIL, "test"+"@example.com");

           personService.createPerson(ppOne);
        }
    }

I did import the : import org.alfresco.model.ContentModel; 我确实导入了:import org.alfresco.model.ContentModel; and a lot of others librarys for my code. 还有很多其他库供我使用。

Thx for help. 谢谢。

The code I'm using and I left some things that I tried too in comments so you can see what things I have done: 我正在使用的代码,在注释中留下了一些我也尝试过的东西,以便您可以看到我做了什么:

import java.io.File;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

import org.alfresco.service.cmr.security.*;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;


import java.util.Iterator;

import org.alfresco.repo.jscript.People;
import org.alfresco.repo.security.authentication.AuthenticationException;
import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.PropertyMap;
import org.apache.chemistry.opencmis.client.api.CmisObject;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.enums.BindingType;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
import org.apache.chemistry.opencmis.client.util.FileUtils;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;

public class Test {

    public static void main(String[] args){
        Test atest = new Test();
        Session session = atest.iniSession();
        AuthenticationService authenticationService=new AuthenticationServiceImpl();
        PersonService personService = new PersonServiceImpl();


        HashMap<QName, Serializable> properties = new HashMap<QName, Serializable>();
        properties.put(ContentModel.PROP_USERNAME, "test");
        properties.put(ContentModel.PROP_FIRSTNAME, "test");
        properties.put(ContentModel.PROP_LASTNAME, "qsdqsd");
        properties.put(ContentModel.PROP_EMAIL, "wshAlors@gmail.com");
        properties.put(ContentModel.PROP_ENABLED, Boolean.valueOf(true));
        properties.put(ContentModel.PROP_ACCOUNT_LOCKED, Boolean.valueOf(false));
        personService.createPerson(properties);

        authenticationService.createAuthentication("test", "changeme".toCharArray());

        authenticationService.setAuthenticationEnabled("test", true);

        authenticationService.getAuthenticationEnabled("Admin");

        //String testAuthen = authenticationService.getCurrentTicket();
        //System.out.println(testAuthen);
        //QName username = QName.createQName("test");
        //Map<QName,Serializable> propertiesUser = new HashMap<QName,Serializable>();
        //propertiesUser.put(ContentModel.PROP_USERNAME,username);
        //propertiesUser.put(ContentModel.PROP_FIRSTNAME,"test");
        //propertiesUser.put(ContentModel.PROP_LASTNAME,"test");
        //propertiesUser.put(ContentModel.PROP_EMAIL, "test@example.com");
        //propertiesUser.put(ContentModel.PROP_PASSWORD,"0000");
        //personService.createPerson(propertiesUser);



        //if (authenticationService.authenticationExists("test") == false)
        //{
        //   authenticationService.createAuthentication("test", "changeMe".toCharArray());

        //   PropertyMap ppOne = new PropertyMap(4);
        //   ppOne.put(ContentModel.PROP_USERNAME, "test");
        //   ppOne.put(ContentModel.PROP_FIRSTNAME, "test");
        //   ppOne.put(ContentModel.PROP_LASTNAME, "test");
        //   ppOne.put(ContentModel.PROP_EMAIL, "test@example.com");
           //ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle");

        //   personService.createPerson(ppOne);
        //}
    }

    public  Session iniSession() {
        Session session;
        SessionFactoryImpl sf = SessionFactoryImpl.newInstance();
        Map<String, String> parameters = new HashMap<String, String>();
        Scanner reader = new Scanner(System.in);
        System.out.println("Enter your logging : ");
        String log = reader.nextLine();
        System.out.println("Enter your password : ");
        String pass = reader.nextLine();

        parameters.put(SessionParameter.USER, log);
        parameters.put(SessionParameter.PASSWORD, pass);

        parameters.put(SessionParameter.BROWSER_URL, "http://127.0.0.1:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser");
        parameters.put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value());
        parameters.put(SessionParameter.REPOSITORY_ID, "-default-");

        try{
            session = sf.createSession(parameters);
        }catch(CmisUnauthorizedException cue){
            session = null;
            System.out.println("Wrong logging OR password !");
        }
        return session;
    }

You are writing a runnable class which is not running the same process as Alfresco. 您正在编写的可运行类与Alfresco运行的进程不同。 In that sense, your class is running "remotely". 从这个意义上讲,您的课程“远程”运行。

Because your class is running remotely to Alfresco, you are correct in using CMIS. 由于您的课程正在Alfresco的远程运行,因此使用CMIS是正确的。 But CMIS will only allow you to perform Create, Read, Update, and Delete (CRUD) functions against documents and folders in Alfresco. 但是CMIS仅允许您对Alfresco中的文档和文件夹执行创建,读取,更新和删除(CRUD)功能。 CMIS does not know how to create users or groups. CMIS不知道如何创建用户或组。

Your class will not be able to instantiate the AuthenticationService or PersonService. 您的班级将无法实例化AuthenticationService或PersonService。 Those are part of the Alfresco Foundation API which only works when you are running in the same process as Alfresco, such as in an Action, a Behavior, or a Java-backed web script. 这些是Alfresco Foundation API的一部分,仅当您在与Alfresco相同的进程中运行(例如在Action,Behavior或Java支持的Web脚本中)时,这些API才起作用。 In those cases, you will use Spring Dependency Injection to inject those services into your Java class. 在这种情况下,您将使用Spring Dependency Injection将这些服务注入Java类。 You would then put your class in a JAR that gets deployed into the Alfresco web application and loaded by the same classloader as Alfresco's. 然后,将您的类放在一个JAR中,该JAR将被部署到Alfresco Web应用程序中,并由与Alfresco相同的类加载器加载。

If you want to create users remotely you should consider using the Alfresco REST API . 如果要远程创建用户,则应考虑使用Alfresco REST API Your runnable class can then use an HTTP client to invoke REST calls to create people and groups. 然后,您的可运行类可以使用HTTP客户端调用REST调用来创建人员和组。

Thanks you for everything ! 感谢你做的一切 ! Thanks to you and researches I found out how to do it ! 多亏您和研究,我才知道该怎么做! For the others who wonder how to do I'll post how I did and what site I used to understand it ! 对于其他想知道如何做的人,我将发布如何做以及我以前了解的网站!

So you just need to manipulate JSON with Java because your alfresco people page (127.0.0.1:8080/alfresco/service/api/people) returns a JSON object, and you'll be able to create, delete, search... users! 因此,您只需要使用Java来操作JSON,因为您的露天人员页面(127.0.0.1:8080/alfresco/service/api/people)返回JSON对象,并且您可以创建,删除,搜索...用户! Thx again ! 再次感谢!

Sites : 网站:

https://api-explorer.alfresco.com/api-explorer/#/people https://api-explorer.alfresco.com/api-explorer/#/people

http://crunchify.com/json-manipulation-in-java-examples/ http://crunchify.com/json-manipulation-in-java-examples/

The code : This is for creating an user : 代码:这是用于创建用户的:

public User createUser(String firstN, String lastN, String email, String pass, String authTicket) throws Exception{
        try{
            String url = "http://127.0.0.1:8080/alfresco/service/api/people?alf_ticket="+authTicket;
            HttpClient httpclient = new HttpClient();
            PostMethod mPost = new PostMethod(url);

            //JSONObject obj = new JSONObject();
            //JSONArray people = obj.getJSONArray("people");
            JSONObject newUser = new JSONObject();
            newUser.put("userName", firstN.toLowerCase().charAt(0)+lastN.toLowerCase());
            newUser.put("enabled",true);
            newUser.put("firstName",firstN);
            newUser.put("lastName", lastN);
            newUser.put("email", email);
            newUser.put("quota",-1);
            newUser.put("emailFreedDisable",false);
            newUser.put("isDeleted",false);
            newUser.put("isAdminAuthority",false);
            newUser.put("password", pass);

            //people.put(newUser);
            //Response response = PostRequest(newUser.toString())); 
            StringRequestEntity requestEntity = new StringRequestEntity(
                    newUser.toString(),
                    "application/json",
                    "UTF-8");
            mPost.setRequestEntity(requestEntity);
            int statusCode2 = httpclient.executeMethod(mPost);

            mPost.releaseConnection();
        }catch(Exception e){
            System.err.println("[ERROR] "+e);
        }
        return new User(firstN, lastN);
    }

And if you want to get all the users you have on alfresco : 而且,如果您想让所有用户都在露天上使用:

public ArrayList<User> getAllUsers(String authTicket)
    {
        ArrayList<User> allUsers = new ArrayList<>();
        String lastName, firstName;
        try{
            String url = "http://127.0.0.1:8080/alfresco/service/api/people?alf_ticket="+authTicket;
            HttpClient httpclient = new HttpClient();
            GetMethod mPost = new GetMethod(url);
            int statusCode1 = httpclient.executeMethod(mPost);
            System.out.println("statusLine >>> "+statusCode1+"....."
                    +"\n status line \n"
                    +mPost.getStatusLine()+"\nbody \n"+mPost.getResponseBodyAsString());
            JSONObject obj = new JSONObject(mPost.getResponseBodyAsString());
            JSONArray people = obj.getJSONArray("people");
            int n = people.length();
            for(int i =0 ; i < n ; i++)
            {
                JSONObject peoples = people.getJSONObject(i);
                User u = new User(peoples.getString("firstName"), peoples.getString("lastName"));
                if (!allUsers.contains(u)){
                    allUsers.add(u);
                }
            }

        }catch(Exception e){
            System.err.println("[ERROR] "+e);
        }

        return(allUsers);

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM