WebCenter Content Generic SOAP Webサービスを使用したHCMデータ・ローダーZIPファイルのアップロード

Oracle WebCenter Contentサーバーは、ファイルのアップロードに使用できるSOAP Webサービス・インタフェース(GenericSoapPort)を公開します。

インライン・コンテンツを含むWebCenter Content Generic SOAP Webサービスの起動

インライン・コンテンツは、GenericSoapPort Webサービス・コールとともに送信できます。

WebサービスのWSDLファイルを次の場所から取得します。

https://{host}/idcws/GenericSoapPort?wsdl

「ホスト」は、Oracle Fusion Cloud ApplicationsのURLです。

リクエストの本文には、次のパラメータが含まれます。

パラメータ 意味 HCMデータ・ローダーのコメント
IdcService

起動するサービス。

ファイルをアップロードするためのCHECKIN_UNIVERSAL

dDocName

コンテンツ・アイテムのコンテンツID。

HcmDataLoaderに渡される値

dDocAuthor

コンテンツ・アイテム作成者(コントリビュータ)。

 
dDocTitle

コンテンツ・アイテム・タイトル。

インポート/エクスポートUIに表示されるファイルのタイトル

dDocType

コンテンツ アイテム タイプ。

ドキュメント

dSecurityGroup

PublicSecureなどのセキュリティ・グループ。

FAFusionImportExport

dDocAccount

コンテンツ・アイテムのアカウント。この値はアカウントが有効な場合のみ必須です。

hcm$/dataloader$/import$

primaryFile

サーバーから見たファイルの場所への絶対パス。

 

dDocName値はレスポンスの一部であり、HCMデータ・ローダー処理をさらに行うために使用するコンテンツIDを表します。

オプションで、リクエストの送信時にエンベロープを使用できます。次に例を示します。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ucm="http://www.oracle.com/UCM" xmlns:wsse="http://schemas.xmlsoap.org/ws/2003/06/secext">
    <soapenv:Header />
    <soapenv:Body>
        <ucm:GenericRequest webKey="cs">
            <ucm:Service IdcService="CHECKIN_UNIVERSAL">
                <ucm:User />
                <ucm:Document>
                    <ucm:Field name="dDocTitle">Department Load File</ucm:Field>
                    <ucm:Field name="dDocType">Document</ucm:Field>
                    <ucm:Field name="dDocAuthor">YOUR_HCM_USER_NAME</ucm:Field>
                    <ucm:Field name="dSecurityGroup">FAFusionImportExport</ucm:Field>
                    <ucm:Field name="dDocAccount">hcm$/dataloader$/import$</ucm:Field>
                    <ucm:Field name="primaryFile">YourZipFile.zip</ucm:Field>
                    <ucm:File href="YourZipFile.zip" name="primaryFile">
                        <ucm:Contents>hQEMA+8YN513c6VEAQf9EstURU0V2erP9hNIP34P6cvwdi2G8hmtTY4dj+jpjSBiBwF28SzOGO5Q T/S6LDM1lAd9fHDFO4CFTEUkiMiAfa4jCpkh2kjvrV05GYiy9rlYGbgjRa38t0Boj0G8dkZia4kw lD5zloegTb4k9dp2ZXtAkJjVPTlmaVs7wPjqHJOk1Dtj+zUL/Dvq/X+rcmBtnvZ6+gX1r/PSBYsI ANiUK36pUac916p1wrYbePtmLs9rLB8dZTIdKE3pbi3aIKECnqnfXN3Rx8BT3afI2kWA9xEsEBwL XSgD4EUlYY2lWKM0wQrSCIfz1jit4zK+vs1Jp3zP3kSFfMH9h5b70ATYCNLpAXTmolmJxhvg9nPN RbgWGM0jWuVE7tXEVL66s2XJuV6HCyJ+3QDTSS/hEzUorpbaH7gOPdd2d9uIJayseWmgkCLhpgNM Ml4dGGDEL7ISZNKbu39MWvptFC5wrFX/VyB0E3kZF3xJ9dHz5UzVN3hiji6/ZLnUKRI+mpY41gEQ BdLm/WehWRLkF9yWhdkKOK1imBa+oLCeZg2YcCPNVqMaf42atoix9kSR+PCdB46SGnyQ2kvx0z9V t+4A/70psaMEOgPmUciQ/CNoC3vPdDs/G+p8Run/9MHoZoW5o2KpGC1M4j593BulKnfE7JZdYopG b1MS9Vrd6e4Oj3ZD7ISyrf8gEsEhvRu4se0CnAA8W2Fj2u88TOBn/rX+9NMffGwwO040a00N4upV 70xY0I0mvMzPKh4u4kHHQLaV7+fChTHIRCXFjvN2ziyGdSCYxiZ9tfhms39jPp2LxJKPnsV5GgC8 XSqpzxipYjbZjpqvKAu0k9VhIF4vHlGjTbzZuhz/CETs5Aj2LXvJksIBpDq6whUK7/LKR3hmfKXi e4xng6B4TwSEvhvRDY0+V2np1RMxzlqW0W3XNpKYqkS2kjO7vQM65CBAqeQjYAW9p1tE1k1S5G2N 1whW46eYIQvN68SzkCQIsafzoAtgKKYClEwJuxGE004i6AluJ0keWx+ZzXohyIxx8eTiw7vp5PIS tm2WTriBJ/x0gMB9CWfdymOFK9Mf</ucm:Contents>
                    </ucm:File>
                </ucm:Document>
            </ucm:Service>
        </ucm:GenericRequest>
    </soapenv:Body>
</soapenv:Envelope>

ただし、HCMデータ ローダー ファイルは通常大きいため、XMLバイナリ最適化パッケージ(XOP)を使用してメッセージ送信最適化メカニズム(MTOM)を使用してWebサービスを呼び出すことをお勧めします。次のリクエスト例は、MTOM/XOPを含むHCMデータ・ローダーZIPファイルをアップロードするリクエスト・ペイロードを示しています。

POST http://{host}/idcws/GenericSoapPort HTTP/1.1 
Accept-Encoding: gzip,deflate
Content-Type: multipart/related; type="application/xop+xml"; start="<rootpart@example.com>"; start-info="text/xml"; boundary="----=_Part_7_163289738.1476693003095" 
SOAPAction: "urn:GenericSoap/GenericSoapOperation"
Authorization: Basic YOUR_AUTHORIZATION_TOKEN 
MIME-Version: 1.0 
Content-Length: 4030385
Host: {host} User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 
Connection: close 

------=_Part_7_163289738.1476693003095 
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml" 
Content-Transfer-Encoding: 8bit 
Content-ID:<rootpart@example.com>


        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ucm="http://www.oracle.com/UCM" xmlns:wsse="http://schemas.xmlsoap.org/ws/2003/06/secext">
            <soapenv:Header>
                <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                    <wsse:UsernameToken wsu:Id="UsernameToken-12345">
                        <wsse:Username>YOUR_HCM_USER_NAME</wsse:Username>
                        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">YOUR_HCM_ACCOUNT_PASSWORD</wsse:Password>
                        <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">ckNXKVpwBU01PD2ENXg5nw==</wsse:Nonce>
                        <wsu:Created>2018-07-01T08:30:03.094Z</wsu:Created>
                    </wsse:UsernameToken>
                </wsse:Security>
            </soapenv:Header>
            <soapenv:Body>
                <ucm:GenericRequest webKey="cs">
                    <ucm:Service IdcService="CHECKIN_UNIVERSAL">
                        <ucm:User/>
                        <ucm:Document>
                            <ucm:Field name="dDocTitle">Department Load File</ucm:Field>
                            <ucm:Field name="dDocType">Document</ucm:Field>
                            <ucm:Field name="dDocAuthor">HCM_IMPL</ucm:Field>
                            <ucm:Field name="dSecurityGroup">FAFusionImportExport</ucm:Field>
                            <ucm:Field name="dDocAccount">hcm$/dataloader$/import$</ucm:Field>
                            <ucm:Field name="primaryFile">YourZipFile.zip</ucm:Field>
                            <ucm:File href="YourZipFile.zip" name="primaryFile">
                                <ucm:Contents>
                                    <inc:Include href="cid:YourZipFile.zip" xmlns:inc="http://www.w3.org/2004/08/xop/include" />
                                </ucm:Contents>
                            </ucm:File>
                        </ucm:Document>
                    </ucm:Service>
                </ucm:GenericRequest>
            </soapenv:Body>
        </soapenv:Envelope> 
------=_Part_7_163289738.1476693003095 
Content-Type: application/zip; name=YourZipFile.zip 
Content-Transfer-Encoding: binary 
Content-ID:<YourZipFile.zip> 
Content-Disposition: attachment; name="YourZipFile.zip"; filename="YourZipFile.zip"

 <<< binary content ommitted for brevity>>> 
 	
------=_Part_7_163289738.1476693003095--

WebCenter Contentドキュメント転送ユーティリティ・アップロード・ツールについて

WebCenter Content Document Transfer Utilityをプログラムで使用して、ZIPファイルをWebCenter Contentサーバーにアップロードできます。

oracle.ucm.fa_genericclient_11.1.1.jarに含まれるoracle.ucm.idcws.client.UploadToolは、推奨される汎用SOAPベースの転送ユーティリティです。ライブラリをサポートするOracle JRF Webサービスが必要で、JAX/WS over HTTPSを使用してWebCenter Contentサーバーと通信します。oracle.ucm.idcws.client.UploadToolは、ローカル・ファイルからストリームされるWebCenter Contentにファイルをアップロードするために使用されます。

汎用SOAPベースの転送ユーティリティは、GenericSoapPort Webサービス(/idcws/GenericSoapPortを介してWebCenter Contentサーバーにアクセスし、適切なUsernameTokenベースのOracle Web Services Managerセキュリティ・クライアント・ポリシーを指定するようクライアントに要求します。

Java Runtime Environmentの要件について

Oracle Java 6 SEリリース1.6.0_20は、WebCenterコンテンツ・ドキュメント転送ユーティリティ・ツールを使用して正常にテストしたOracle Java Runtime Environmentの最も古いバージョンです。Oracleでは、最新のバグ修正およびセキュリティー更新が適用されるように、最新の Java 6 SEまたは Java 7 SEリリースを使用することをお勧めします。

アップロード・ツールのパラメータについて

oracle.ucm.idcws.client.UploadToolを起動する場合は、次のパラメータを指定する必要があります。

  • url: WebCenter ContentサーバーのGenericSoapPort Webサービスの場所(例: https://<Your_Oracle_WebCenter_Content_Server_URL>/idcws/GenericSoapPort)

  • policy: oracle/wss_username_token_over_ssl_client_policyoracle/wss_username_token_client_policyポリシーなどのサーバーの構成済サービス・ポリシーに一致する、適切なUsernameTokenベースのOracle Web Services Managerセキュリティ・クライアント・ポリシー。

  • username: Oracle Cloud HCMユーザー名。

  • password: Oracle Cloud HCMのパスワード。

  • primaryFile: アップロードするローカル・ファイルの完全修飾パス。

  • dDocAccount: 宛先セキュリティ・アカウント。

  • dDocTitle: ドキュメントのタイトル。

  • dDocName: このパラメータは、ファイルのdDocName値を指定して、既存のファイルのバージョンを設定する場合に使用します。

  • チェックアウト: 新しいリビジョンを追加する場合は、最初にチェックアウトを実行します。このパラメータの値は、trueまたはfalse (デフォルト)です。

また、デバッグまたはサイレント呼出しのユースケースにいくつかのオプション・パラメータを渡すことができます。

  • version: UploadToolリビジョンおよびバージョンを出力します。

  • ping: PING_SERVERテストを実行して接続URLおよび資格証明を検証します。

  • verbose: 完全なリクエストおよびレスポンス・データ・バインダを記録するように詳細出力を構成します。

  • quiet: 最小限のログ出力を構成します。

  • silent: ログ・メッセージを無効にします。

  • log_file_name: ログ情報をSystem.outとは異なる外部ファイルに送信します。

  • log_file_append: ログを追加するか上書きするかを構成します。

汎用SOAP Webサービスを使用したプログラムによるHCMデータ・ローダー・ファイルのアップロード

HCMデータ・ローダーZIPファイルをアップロードする際のプログラム・オプションの1つは、Javaプログラミング言語を使用して汎用SOAP Web Service APIを使用することです。

  1. これらのライブラリをJavaプログラムにインポートします。
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.nio.charset.Charset;
    import java.util.ArrayList;
    
    import java.util.List;
    import java.util.Map;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    import oracle.stellent.ridc.IdcClientException;
    import oracle.ucm.idcws.client.UploadTool;
    import oracle.ucm.idcws.client.UploadTool.UploadResults;
    import oracle.ucm.idcws.client.bulk.UploadException;
    import oracle.ucm.idcws.client.model.content.CheckinSource;
    import oracle.ucm.idcws.client.model.content.TransferFile;
    import oracle.ucm.idcws.client.model.response.CheckinResponse;
  2. Generic SOAP Webサービスを使用して、WebCenter Content Serverにファイルをアップロードする関数を作成します。
    public static String uploadFileToUCMwithSOAP(String url, String username, String password, File uploadFile, 
    			String identifier, String dDocName, String dDocTitle, String dSecurityGroup, String dDocAccount, String dDocType) throws Exception {
    		//Insert all the code in the next steps in the body of this function		
    	}
  3. ファンクションの本体で、urlusernamepasswordおよびOWSMセキュリティ・ポリシーなどのコア引数を含むListオブジェクトを作成します。次に例を示します。
    		List<String> coreArgs = new ArrayList<String>();
    		coreArgs.add("url=" + url);
    		coreArgs.add("policy=oracle/wss_username_token_over_ssl_client_policy");
    		
    		
    		coreArgs.add("username=" + username);
    		coreArgs.add("password=" + password);
    		coreArgs.add("silent=false"); // minimal log output
    		coreArgs.add("verbose=true"); // verbose log output
    
    		List<String> argsList = new ArrayList<String>();
    		argsList.addAll(coreArgs);
    
    		argsList.add("threads=3");
    		argsList.add("throwOnThreadException=false"); // run() will not throw an exception should a thread error
    		
    		String[] uploadArgs = argsList.toArray(new String[0]);
  4. UploadToolオブジェクトを作成し、uploadArgs配列を使用して初期構成を設定します。次に例を示します。
    		UploadTool uploadTool = new UploadTool();
    
    		// Setup the tool's initial configuration from the supplied arguments.
    		boolean terminateEarly = uploadTool.setup(uploadArgs);
    		if (terminateEarly) {
    			throw new Exception("Error with the UCM UploadTool's initial configuration from the supplied arguments, please check arguments and try again.");
    		}
  5. Webサービス・パラメータを追加して、リクエストを行います。
    	List < CheckinSource > items = new ArrayList < CheckinSource > ();
    	items.add(new LocalFileSource(identifier, dDocName, dDocTitle, dSecurityGroup, dDocAccount, dDocType,
    	    uploadFile.getAbsolutePath()));
    
    	uploadTool.setCheckinItems(items);
    	UploadResults uploadResults = uploadTool.run();
    	if (uploadResults != null) {
    	    Map < Integer, Exception > failedCheckins = uploadResults.getAllFailedCheckinsKeyedByTaskNum();
    	    Map < Integer, UploadException > failedCheckinsDetailed = uploadResults.getFailedCheckinsKeyedByTaskNum();
    	    for (Map.Entry < Integer, Exception > entry: failedCheckins.entrySet()) {
    	        if (failedCheckinsDetailed.containsKey(entry.getKey())) {
    	            UploadException e = failedCheckinsDetailed.get(entry.getKey());
    	            logger.info("Checkin with task number " + e.getTaskNumber() + " and identifier " +
    	                e.getIdentifier() + " failed with message " + e.getMessage());
    	        } else {
    	            logger.info("Checkin with task number " + entry.getKey() + " failed with message " +
    	                entry.getValue().getMessage());
    	        }
    	    }
    
    	    Map < Integer, CheckinResponse > successfulCheckins = uploadResults.getSuccessfulCheckinsKeyedByTaskNum();
    	    for (Map.Entry < Integer, CheckinResponse > entry: successfulCheckins.entrySet()) {
    	        CheckinResponse response = entry.getValue();
    	        logger.info("Checkin with task number " + response.getTaskNumber() + " and identifier " +
    	            response.getIdentifier() + " succeeded. dID=" + response.getDId() + " dName=" + response.getDDocName());
    
    
    
    	    }
    	}
    	return dDocName; // dDocName is whats used by HDL Import	

    リクエストが実行されている場合、各エントリは別々に処理されます。ロガー・オブジェクトに送信された失敗した項目はすべて片側に表示されます。成功したアイテムはすべてレスポンスから検証され、反対側に記録されます。コンテンツIDであるdDocNameがレスポンスで返され、ファイルがWebCenter Contentサーバーに正常にアップロードされたことを示します。