3

IBMが提供する Java プログラムを使用しようとしています。以下のコードを参照してください。このプログラムをコンパイルしようとすると、

C:\Temp>"C:\Program Files (x86)\Java\jdk1.6.0_25\bin\javac.exe" GetOrphanMyFolde
rs.java

というエラーが表示されます

GetOrphanMyFolders.java:96: cannot find symbol
symbol  : variable PropEnum
location: class GetOrphanMyFolders
                                 PropEnum.canBurst      ,
                                 ^
GetOrphanMyFolders.java:97: cannot find symbol
symbol  : variable PropEnum
location: class GetOrphanMyFolders
                                 PropEnum.capabilities   ,
                                 ^

私は Java 初心者ですが、このエラーの原因は何ですか? 使用しているプログラムはこちら

/**
 * Licensed Material - Property of IBM
 * © Copyright IBM Corp. 2012
 *
 * GetOrphanMyFolders.java
 *
 * Description: Technote 1340789 - SDK Sample: How to recover the My Folders of users that no longer exist in the Authentication Provider
 *
 * Tested with: IBM Cognos BI 10.1.1, IBM Java 5.0, Axis 1.4
 *
 */

import java.util.Vector;

import javax.xml.namespace.QName;

import org.apache.axis.client.Stub;
import org.apache.axis.message.SOAPHeaderElement;

import com.cognos.developer.schemas.bibus._3.BaseClass;
import com.cognos.developer.schemas.bibus._3.BiBusHeader;
import com.cognos.developer.schemas.bibus._3.ContentManagerService_PortType;
import com.cognos.developer.schemas.bibus._3.ContentManagerService_ServiceLocator;
import com.cognos.developer.schemas.bibus._3.CopyOptions;
import com.cognos.developer.schemas.bibus._3.PropEnum;
import com.cognos.developer.schemas.bibus._3.QueryOptions;
import com.cognos.developer.schemas.bibus._3.SearchPathMultipleObject;
import com.cognos.developer.schemas.bibus._3.SearchPathSingleObject;
import com.cognos.developer.schemas.bibus._3.Sort;
import com.cognos.developer.schemas.bibus._3.UpdateActionEnum;
import com.cognos.developer.schemas.bibus._3.XmlEncodedXML;

public class GetOrphanMyFolders
{
    //TODO: change the following variables depending on your installation and setup

    //--- begin changes ----
    private static String dispatcherURL = "http://localhost:9300/p2pd/servlet/dispatch";

    //Change the next three variables to a valid namespace ID as defined in Cognos Configuration and NOT the namespace name
    //Provide a valid user ID and password if Anonymous is disabled
    private static String nameSpaceID   = "Cognos";
    private static String userName      = "admin";
    private static String password      = "password";

    // define where you are copying the orphaned my folders to
    private static String targetLocation = "/content/folder[@name='OrphanedMyFolders']";
    //--- end changes ---

    //Services to be used in the sample
    private ContentManagerService_PortType cmService = null;

    private String[] getAllMyFoldersSearchPaths(String namespaceID)
    {
        String listOfAccountSP [] = null;
        PropEnum props[] = new PropEnum[] {PropEnum.searchPath, PropEnum.defaultName, PropEnum.portalPage};
        Sort sOpt[] = new Sort[]{}; 
        QueryOptions qOpt = new QueryOptions(); 
        try
        {
            // get the template user's Account object. 
            BaseClass template[] = cmService.query(new SearchPathMultipleObject("//folder"), props, sOpt, qOpt);
            listOfAccountSP = new String [template.length];

            for (int x=0;x<template.length;x++)
            {
                if ( template[x].getSearchPath().getValue().indexOf(")/folder[@name='My Folders']")>0 )
                {
                    listOfAccountSP[x]=template[x].getSearchPath().getValue();
                }
            }
        }
        catch (Exception e)
        {
            System.out.println(e);
            e.printStackTrace();
        }
        return listOfAccountSP;
    }

    private PropEnum[] getAllPropEnum ()
      {
        PropEnum properties[] = new PropEnum[]{
                 PropEnum.active, 
                 PropEnum.actualCompletionTime,
                 PropEnum.actualExecutionTime ,
                 PropEnum.advancedSettings ,
                 PropEnum.ancestors ,
                 PropEnum.asOfTime ,
                 PropEnum.base ,
                 PropEnum.brsAffineConnections, 
                 PropEnum.brsMaximumProcesses ,
                 PropEnum.brsNonAffineConnections, 
                 PropEnum.burstKey ,
                 PropEnum.businessPhone,             
                 PropEnum.canBurst      ,       
                 PropEnum.capabilities   ,          
                 PropEnum.capacity        ,     
                 PropEnum.closeConnectionCommands,             
                 PropEnum.closeSessionCommands    ,         
                 PropEnum.configuration            , 
                 PropEnum.connections             ,
                 PropEnum.connectionString         ,    
                 PropEnum.consumers             ,
                 PropEnum.contact             ,
                 PropEnum.contactEMail         ,    
                 PropEnum.contentLocale         ,    
                 PropEnum.creationTime           ,  
                 PropEnum.credential             ,
                 PropEnum.credentialNamespaces    ,         
                 PropEnum.credentials             ,
                 PropEnum.cubeContentName          ,   
                 PropEnum.dailyPeriod             ,
                 PropEnum.data             ,
                 PropEnum.dataBlocks        ,     
                 PropEnum.dataSize           ,  
                 PropEnum.dataType            , 
                 PropEnum.defaultDescription   ,          
                 PropEnum.defaultName           ,  
                 PropEnum.defaultOutputFormat    ,         
                 PropEnum.defaultScreenTip        ,     
                 PropEnum.defaultTriggerDescription,
                 PropEnum.deployedObject ,
                 PropEnum.deployedObjectAncestorDefaultNames, 
                 PropEnum.deployedObjectClass ,
                 PropEnum.deployedObjectDefaultName, 
                 PropEnum.deployedObjectStatus      ,       
                 PropEnum.deployedObjectUsage        ,     
                 PropEnum.deploymentOptions           ,  
                 PropEnum.description             ,
                 PropEnum.disabled             ,
                 PropEnum.dispatcherID          ,   
                 PropEnum.dispatcherPath         ,    
                 PropEnum.displaySequence         ,    
                 PropEnum.email             ,
                 PropEnum.endDate            , 
                 PropEnum.endType             ,
                 PropEnum.eventID             ,
                 PropEnum.everyNPeriods        ,     
                 PropEnum.executionFormat        ,     
                 PropEnum.executionLocale         ,    
                 PropEnum.executionPageDefinition  ,           
                 PropEnum.executionPageOrientation  ,           
                 PropEnum.executionPrompt            , 
                 PropEnum.faxPhone             ,
                 PropEnum.format             ,
                 PropEnum.gateway             ,
                 PropEnum.givenName            , 
                 PropEnum.governors             ,
                 PropEnum.hasChildren            , 
                 PropEnum.hasMessage             ,
                 PropEnum.hasPrompts             ,
                 PropEnum.height             ,
                 PropEnum.homePhone           ,  
                 PropEnum.horizontalElementsRenderingLimit,
                 PropEnum.identity ,
                 PropEnum.isolationLevel, 
                 PropEnum.lastConfigurationModificationTime, 
                 PropEnum.lastPage ,
                 PropEnum.loadBalancingMode, 
                 PropEnum.locale ,
                 PropEnum.location, 
                 PropEnum.members ,
                 PropEnum.message ,
                 PropEnum.metadataModel ,
                 PropEnum.mobilePhone ,
                 PropEnum.model ,
                 PropEnum.modelName ,
                 PropEnum.modificationTime ,
                 PropEnum.monthlyAbsoluteDay ,
                 PropEnum.monthlyRelativeDay ,
                 PropEnum.monthlyRelativeWeek ,
                 PropEnum.name ,
                 PropEnum.namespaceFormat ,
                 PropEnum.objectClass ,
                 PropEnum.openConnectionCommands ,
                 PropEnum.openSessionCommands ,
                 PropEnum.options ,
                 PropEnum.output ,
                 PropEnum.owner ,
                 PropEnum.ownerPassport ,
                 PropEnum.packageBase ,
                 PropEnum.page ,
                 PropEnum.pageOrientation ,
                 PropEnum.pagerPhone ,
                 PropEnum.parameters ,
                 PropEnum.parent ,
                 PropEnum.paths ,
                 PropEnum.permissions ,
                 PropEnum.policies ,
                 PropEnum.portalPage ,
                 PropEnum.position ,
                 PropEnum.postalAddress ,
                 PropEnum.printerAddress ,
                 PropEnum.productLocale ,
                 PropEnum.qualifier ,
                 PropEnum.recipients ,
                 PropEnum.recipientsEMail ,
                 PropEnum.related ,
                 PropEnum.replacement ,
                 PropEnum.requestedExecutionTime ,
                 PropEnum.retentions ,
                 PropEnum.rsAffineConnections ,
                 PropEnum.rsMaximumProcesses ,
                 PropEnum.rsNonAffineConnections ,
                 PropEnum.rsQueueLimit ,
                 PropEnum.runAsOwner ,
                 PropEnum.runningState ,
                 PropEnum.runOptions ,
                 PropEnum.screenTip ,
                 PropEnum.searchPath ,
                 PropEnum.searchPathForURL ,
                 PropEnum.sequencing ,
                 PropEnum.serverGroup ,
                 PropEnum.source ,
                 PropEnum.specification ,
                 PropEnum.startAsActive ,
                 PropEnum.startDate ,
                 PropEnum.state ,
                 PropEnum.status ,
                 PropEnum.stepObject ,
                 PropEnum.surname ,
                 PropEnum.target ,
                 PropEnum.taskID ,
                 PropEnum.timeZoneID ,
                 PropEnum.triggerDescription ,
                 PropEnum.triggerName ,
                 PropEnum.type ,
                 PropEnum.unit ,
                 PropEnum.uri ,
                 PropEnum.usage ,
                 PropEnum.user ,
                 PropEnum.userCapabilities ,
                 PropEnum.userCapability ,
                 PropEnum.userName ,
                 PropEnum.version ,
                 PropEnum.verticalElementsRenderingLimit ,
                 PropEnum.viewed ,
                 PropEnum.weeklyFriday ,
                 PropEnum.weeklyMonday ,
                 PropEnum.weeklySaturday ,
                 PropEnum.weeklySunday ,
                 PropEnum.weeklyThursday ,
                 PropEnum.weeklyTuesday ,
                 PropEnum.weeklyWednesday ,
                 PropEnum.width ,
                 PropEnum.yearlyAbsoluteDay, 
                 PropEnum.yearlyAbsoluteMonth, 
                 PropEnum.yearlyRelativeDay ,
                 PropEnum.yearlyRelativeMonth, 
                 PropEnum.yearlyRelativeWeek ,

        };
        return properties;
      }

    private String[][] getAllCIs(String namespaceID)
    {
        String listOfCIs [][] = null;

        String searchPath = "CAMID('"+namespaceID+"')//account";
        PropEnum props[] = new PropEnum[] {PropEnum.searchPath, PropEnum.defaultName, PropEnum.portalPage};
        Sort sOpt[] = new Sort[]{}; 
        QueryOptions qOpt = new QueryOptions(); 
        try
        {
            // get the template user's Account object. 
            BaseClass template[] = cmService.query(new SearchPathMultipleObject(searchPath), props, sOpt, qOpt);
            listOfCIs = new String [2] [template.length];

            for (int x=0;x<template.length;x++)
            {
                    listOfCIs[0][x]=template[x].getSearchPath().getValue();
                    listOfCIs[1][x]=template[x].getDefaultName().getValue();
            }
        }
        catch (Exception e)
        {
            System.out.println(e);
            e.printStackTrace();
        }

        return listOfCIs;

    }

    private void moveMF2PF(String path, String targetLocation)
    {
        String userSearchPaths = path ;
        PropEnum props[] = getAllPropEnum();
        String user = path.substring(0, path.indexOf("/folder[@name='My Folders']"));

        try
        {
            //Query the Content Store for all objects in My Folders for user userName
            BaseClass bc[] = cmService.query(new SearchPathMultipleObject(userSearchPaths), props, new Sort[]{}, new QueryOptions());

            if (bc != null && bc.length > 0)
            {
                //copy the folder to Public Folders and rename
                String[] newName={user};
                CopyOptions opt = new CopyOptions();
                opt.setUpdateAction(UpdateActionEnum.replace);
                opt.setRecursive(true);
                cmService.copyRename(bc,new SearchPathSingleObject(targetLocation),newName,opt);
            }
            else
                System.out.println("User " + user+" did not have My Folders. It could be that they have not logged on yet");
        }
        catch (Exception e)
        {
            System.out.println(e);
            e.printStackTrace();
        }
    }

    /**
     * Establish a connection to Cognos BI and initialize the different services
     */
    private void connectToCognos() 
    {
        ContentManagerService_ServiceLocator cmServiceLocator = new ContentManagerService_ServiceLocator();

        try 
        {
            cmService = cmServiceLocator.getcontentManagerService(new java.net.URL(dispatcherURL));
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

    /**
     * Logon to Cognos BI using valid credentials information
     */
    private void logon(String nameSpaceID, String userName, String password) 
    {
        StringBuffer credentialXML = new StringBuffer();

        credentialXML.append("<credential>");
        credentialXML.append("<namespace>").append(nameSpaceID).append("</namespace>");
        credentialXML.append("<username>").append(userName).append("</username>");
        credentialXML.append("<password>").append(password).append("</password>");
        credentialXML.append("</credential>");

        String encodedCredentials = credentialXML.toString();
        XmlEncodedXML xmlCredentials = new XmlEncodedXML();
        xmlCredentials.set_value(encodedCredentials);

        try 
        {
            cmService.logon(xmlCredentials, null);
            getSetHeaders();
        } 
        catch (Exception ex) 
        {
            ex.printStackTrace();
        }
    }

    private void getSetHeaders()
    {
        String BiBus_NS = "http://developer.cognos.com/schemas/bibus/3/";
        String BiBus_H = "biBusHeader";

        BiBusHeader CMbibus = null;

        SOAPHeaderElement temp = ((Stub)cmService).getResponseHeader(BiBus_NS, BiBus_H);

        try 
        {
            CMbibus = (BiBusHeader)temp.getValueAsType(new QName (BiBus_NS, BiBus_H));
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }

        if (CMbibus != null)
        {
            ((Stub)cmService).setHeader(BiBus_NS, BiBus_H, CMbibus);
        }
    }

    /**
     * This is the main class, which connects to Cognos BI and calls the
     * method doWork(), containing the specific code for this sample
     */
    public static void main(String args[]) 
    {

        GetOrphanMyFolders mainClass = new GetOrphanMyFolders();

        mainClass.connectToCognos();

        // If Anonymous is disabled, then logon
        if (nameSpaceID.length() > 0) 
        {
            mainClass.logon(nameSpaceID, userName, password);
        }

        //get all the CAMIDs related to the My Folders searchpath
        String[] listOfMyFolders = mainClass.getAllMyFoldersSearchPaths(nameSpaceID);
        String[][] listOfCamIds = mainClass.getAllCIs(nameSpaceID);
        Vector<String> orphanedMyFolders = new Vector<String>();

        // find a my folder that does not have an existing owner from the ldap 
        boolean found = false;
        for (int i = 0; i < listOfMyFolders.length; i++)
        {
            if (listOfMyFolders[i] != null )
            {
                if (listOfMyFolders[i].endsWith("[@name='My Folders']")) 
                {
                    int y = 0;
                    for (y = 0; y < listOfCamIds[0].length - 1; y++) 
                    {
                        String test = listOfCamIds[0][y];
                        if (listOfMyFolders[i].indexOf(test) >= 0) 
                        {
                            found = true;
                        }
                    }
                    if (!found) 
                    {
                        //  String userName = getUserNameFromCamid(listOfMyFolders[i]);
                        System.out.println(listOfMyFolders[i] + " does not have an associated user");
                        orphanedMyFolders.add(listOfMyFolders[i]);
                    }
                    found = false;
                }               
            }
        }

        // Now we need to take the list of orphaned My Folders and move them to the 
        // public folders so that the content can be examined.
        for (int x = 0; x < orphanedMyFolders.size(); x++)
        {
            mainClass.moveMF2PF(orphanedMyFolders.elementAt(x).toString(), targetLocation);
        }
        System.out.println("Done ....");
    }
}
4

4 に答える 4

6

問題は、cognos jar が現在見えないことです。したがって、コンパイラは、この jar にパッケージ化されているクラスへの参照を解決できません。

axisCognosClient.jar は、cognos インストール ディレクトリにあります。

 %COGNOS_INSTALL_DIR%/c8/webapps/p2pd/WEB-INF/lib 

コンパイル時に、このディレクトリをクラスパスに含めます。この jar には、インポート ステートメントで参照するすべてのクラスが含まれています。

于 2013-01-31T08:15:25.873 に答える
3

通常、重要なのは最初に報告されたエラーです。これらを修正すると、残りが修正されます。最初のエラーが次のような場合: GetOrphanMyFolders.java:19: エラー: パッケージ com.cognos.developer が存在しません import com.cognos.developer.*; ^

次に、IBM の指示に従ってこれらのパッケージをダウンロードし、クラスパスに追加する必要があります。

すでにダウンロードされている場合は、http://www-01.ibm.com/support/docview.wss?uid=swg21343429 を試してください。

于 2013-02-04T21:16:14.177 に答える
3

このサンプルGetOrphanMyFolders.javaは、外部ライブラリ (つまり jar) で定義されたクラスを使用しています。これらは (通常は の下で) で利用できるはずCognos 8 SDKですC8_INSTALLATION_DIR/sdk/libcognosClient.jaraxisCognosClient.jar

Java は初めてなので、これを使用してコンパイルしjavac、外部 jar をクラスパスに追加するのは面倒です。日食を使用することをお勧めします

ダウンロード/インストール後 (好きなディレクトリに解凍するだけ)、 を作成し、パッケージの下New Java Projectに追加します (コピー/貼り付けまたはドラッグ/ドロップ)。次に、この質問を参照して、プロジェクトのクラスパスにライブラリを追加する方法を確認してください。GetOrphanMyFolders.javasrc

これを行う方法を理解するよりもはるかに簡単ですjavac -cp

于 2013-02-09T00:14:22.647 に答える
2

PropEnum 型のプロパティ配列を初期化しています。PropEnum には canBurst と機能が属性として定義されていない可能性があります。

{PropEnum.canBurst ,PropEnum.capabilities ,} から {PropEnum.canBurst, PropEnum.capabilities,} の間のスペースを削除してみてください。スペースが問題になることはありません。

于 2013-02-07T13:33:39.127 に答える