14


提交验证器工作流

提交到 Sun Java System Content Delivery Server 的内容需通过由提交检验器工作流管理的验证过程。工作流通常包含使用内容验证适配器验证内容的步骤。执行的工作流由您指定的标准确定。不要求特殊处理的内容必须由默认工作流处理。

本章包含以下主题:


14.1 内容验证适配器

可以在提交验证器工作流中使用内容验证适配器来处理提交到 Content Delivery Server 的内容。适配器可以处理在接受内容之前所需的任何预处理。例如,适配器可用于验证内容是否满足企业建立的指导方针、添加数字权限管理 (Digital Rights Management, DRM) 代码,或者对代码进行混淆处理。

14.1.1 提供的适配器

工作流中的每个步骤必须包含要运行该步骤的内容验证适配器的名称。下表介绍了随 Content Delivery Server 提供的适配器。

 


表 14-1 内容验证适配器

适配器

描述

AddCapabilityAdapter

在内容中添加一项额外的设备功能,可用于将内容与设备相匹配。

AddDerivedEditionAdapter

存储已发布、储存和下载的版本。

APIFilterAdapter

验证是否仅使用开发者计划(为提交内容的开发者指定)所允许的 API。它还确定哪些设备支持内容所使用的 API。

AutoPublishAdapter

基于 $CDS_HOME/deployment/deployment-name/conf/AutoPublishRules.properties 文件中定义的规则自动发布内容,而不需要 Catalog Manager 管理员采取任何操作。有关设置规则的信息,请参见 1.7 设置自动发布

CopyrightAdapter

确保未在本地存储受版权保护的内容。

DRMAdapter

使用 DRM 代理测试 MIDlet。

ExternalToInternalAdapter

将使用内容聚集器界面提交的外部托管内容转换为本地存储的内容。

IAppliValidationAdapter

验证字节流是否为 iAppli 应用程序归档文件。

MethodRedirectionAdapter

将某些方法调用重定向到特定方法,这些方法可以为通过 DRM 代理进行测试的 MIDlet 提供所需的特殊处理。

MIDletValidationAdapter

验证字节流是否为 MIDlet 应用程序归档文件。

MIDletSigningAdapter

签署 MIDlet。

MIDletPermissionsAdapter

添加 MIDlet-PermissionsMIDlet-Permissions-Opt 属性的权限,运行通过连接的 DRM 代理进行测试的 MIDlet 时需要这些权限。

ProcessOmaDrmMessageAdapter

接受 DRM 消息中打包的内容(如 OMA DRM 1.0 所定义),并将内容的 MIME 类型添加为必需的设备功能。

SetEditionWeightAdapter

为内容指定版本权重,以便在多个版本与设备功能匹配时传送权重较高的版本。


 

14.1.2 编写适配器

如果提供的适配器均无法满足您的需要,您可以使用内容验证 API 自行创建。有关内容验证 API 的信息,请参见《Sun Javatrademark System Content Delivery Server 5.1 定制指南》。

如果您编制的适配器需要一些值,而此时无法知道这些值,则请为适配器创建一个属性文件。例如,如果适配器需要知道其使用的实用程序的位置,则请创建一个包含位置属性的属性文件。将位置属性设置为指向包含系统(在其上运行适配器)上实用程序的目录。将适配器编制为需要实用程序的位置时,引用位置属性。创建的属性文件必须置于 $CDS_HOME/deployment/deployment-name/conf 目录中。

14.1.3 注册内容验证适配器

要注册所编写的适配器,请在 $CDS_HOME/deployment/deployment-name/conf/SubmissionVerifierAdapters.xml 文件中添加一条语句。如果适配器需要属性文件中的值,则请在 property-file 属性中指定文件的名称。该属性文件必须位于 $CDS_HOME/deployment/deployment-name/conf 目录中。

以下代码示例显示了名为 MyValidationAdapter 的样例适配器的注册语句,该适配器需要使用名为 MyValidation.properties 的属性文件。


代码样例 14-1 样例适配器注册文件
<adapter id="MyValidationAdapter" name="sample.package.MyValidationAdapter"
    propertyfile="MyValidation.properties"/>

 


14.2 提供的工作流

随 Content Delivery Server 一起提供的工作流在 $CDS_HOME/deployment/deployment-name/conf/SubmissionVerifierWorkflows.xml 文件中进行定义。预定义的工作流可用于以下类型的内容:

可以使用提供的这些工作流,也可以根据需要对其进行修改。例如,如果不希望执行工作流中提供的某个操作(如 API 过滤),请将该操作的步骤注释掉。要将步骤添加到工作流或创建新的工作流,请参见 14.3 创建工作流。如果想为默认标准指定的内容以外的内容执行工作流,请按 14.4 指定工作流标准中所述更改标准。



注 - SubmissionVerifierWorkflows.xml 文件必须保存为 UTF-8 格式。请确保使用的编辑器支持该格式。



14.2.1 Java 应用程序的工作流

Content Delivery Server 支持使用 MIDP 1.0 或 MIDP 2.0 库的 Java 应用程序。将提供一个可用于大多数 Java 应用程序的默认工作流。此外,还将提供一个用于签署 CDS DRM 代理未保护的 Java 应用程序的工作流。

14.2.1.1 Java 应用程序的默认工作流

Java 应用程序的默认工作流执行 API 过滤、存储内容并检查是否要自动发布内容。如果未使用 DRM 方法保护内容,则以原始形式存储内容。如果使用 CDS DRM 代理保护内容,则工作流将测试 MIDlet。对于 MIDP 2.0 MIDlet,工作流还会将所有需要的权限添加到 MIDlet-PermissionsMIDlet-Permissions-Opt 属性中,并签署 MIDlet。

可通过注释掉关联步骤来禁用操作。例如,如果不希望执行 API 过滤,请注释掉工作流的步骤 2。

不要注释掉名为 AddingDerivedEdition 的步骤。此步骤为必需步骤,它将存储订户下载的内容版本。

要签署应用程序,需要有一个密钥存储文件,该文件包含安装所需的私钥和受信证书。请使用随 JDKtrademark 软件提供的 keytool 实用程序来创建上述文件。必须为 keyalg 参数指定 RSA。有关信息,请参见 JDK 软件文档。

如果使用 CDS DRM 代理保护内容,则必须在 $CDS_HOME/deployment/deployment-name/conf/cdsdrmagent.properties 文件中设置以下属性:

14.2.1.2 用于签署 Java 应用程序的工作流

如果未使用 CDS DRM 代理保护内容,并且需要签署 MIDP 2.0 MIDlet,则可使用所提供的 Java 应用程序工作流的备用版本。要使用此工作流,必须按 14.4 指定工作流标准中所述创建标准,以标识要由此工作流处理的内容。此工作流的标准在文件中必须位于 Java 应用程序默认工作流标准的前面。

已签署的应用程序的工作流要求有一个密钥存储文件,该文件包含安装所需的私钥和受信证书。请使用随 JDK 软件提供的 keytool 实用程序来创建此文件。必须为 keyalg 参数指定 RSA。有关信息,请参见 JDK 软件文档。

SubmissionVerifierWorkflows.xml 文件中编辑已签署的 Java 应用程序的工作流,并提供密钥存储文件的全限定路径和文件名,作为工作流步骤 3 中的 MIDletSigning.KeyStoreFilePath 的值。此外,还必须提供 MIDletSigning.KeyStorePasswordMIDletSigning.KeyAliasMIDletSigning.KeyPassword 属性的值。有关这些属性的信息,请参见 14.2.1.1 Java 应用程序的默认工作流

14.2.2 iAppli 应用程序的工作流

Content Delivery Server 支持使用 DoJa 库的 iAppli 应用程序。iAppli 应用程序的默认工作流执行 API 过滤、以原始格式存储内容并检查是否要自动发布内容。

可通过注释掉关联步骤来禁用操作。不要注释掉名为 AddingDerivedEdition 的步骤。此步骤为必需步骤,它将存储订户下载的内容版本。

14.2.3 受版权保护的外部托管内容的工作流

受版权保护的外部托管内容的工作流可以标识由于版权限制而不能由 Content Delivery Server 缓存的内容。此工作流在内容目录中创建一个条目、确保仅为内容存储元数据并检查是否要自动发布内容。

可通过注释掉关联步骤来禁用操作。此工作流中的前两个步骤都是必需的。不要注释掉名为 AddingDerivedEdition 的步骤或名为 PreventingCopies 的步骤。

如果希望 Content Delivery Server 接受这种类型的内容,请从名为 isCopyrighted 的标准(用于指定执行名为 Copyrighted External Content Workflow 的工作流)中删除开始和结束注释语句。

除 Java 应用程序和 iAppli 应用程序之外的任何内容都可以标记为受版权保护。要指定将执行此工作流的内容,请按 14.4 指定工作流标准中所述设置标准。

14.2.4 默认工作流

对于所有与任何其他工作流的标准不匹配的内容都执行默认工作流。默认工作流以原始格式存储内容并检查是否要自动发布内容。

不要注释掉名为 AddingDerivedEdition 的步骤。此步骤为必需步骤,它将存储订户下载的内容版本。


14.3 创建工作流

提交验证器工作流介绍了一些步骤,用于验证和保护提交到 Content Delivery Server 的内容。以下代码示例显示的工作流用于受版权保护的外部托管内容。


代码样例 14-2 受版权保护的外部托管内容的工作流
<workflow id="4" name="Copyrighted External Content Workflow" 
          activation="manual">
  <desc>
    This workflow is used to ensure copyrighted external content is not stored
  </desc>
  <step-list>
    <step id="1" name="AddingDerivedEdition" adapter="AddDerivedEditionAdapter">
      <desc>
        This step adds a downloadable edition derived from the original
      </desc>
      <argument-list>
        <argument name="AddDerivedEdition.EditionNameSuffix"
                  kind="indirect" value="editionnamesuffix""/>
        <argument name="AddDerivedEdition.StoreOriginalBytes"
                  kind="direct" value="true"/>
      </argument-list>
    </step>
    <step id="2" name="PreventingCopies" adapter="CopyrightAdapter">
      <desc>
        This step removes any locally stored copies of the content
      </desc>
    </step>
    <step id="3" name="AutoPublish" adapter="AutoPublishAdapter"/>
  </step-list>
</workflow>

 

您定义的每个工作流都需要以下项:

如果工作流创建了多个版本,则传送给订户的版本取决于设备的功能。如果有多个版本与设备匹配,则创建的最后一个匹配版本将是传送的版本。例如,如果工作流中的步骤 2、5 和 7 分别创建了不同的内容版本,且设备可以运行在步骤 2 和 7 中创建的版本,则将传送在步骤 7 中创建的版本。

要基于 $CDS_HOME/deployment/deployment-name/conf/AutoPublishRules.properties 文件中定义的规则自动发布内容,请包括一个用于执行 AutoPublishAdapter 的步骤。有关设置规则的信息,请参见 1.7 设置自动发布

请将工作流添加到 $CDS_HOME/deployment/deployment-name/conf/SubmissionVerifierWorkflows.xml 文件中。要指定执行工作流的标准,请参见 14.4 指定工作流标准

14.3.1 使用“添加功能”适配器

AddCapabilityAdapter 适配器可用于在验证过程期间将所需的设备功能添加到内容中。例如,可以使用此适配器添加设备处理 MP3 文件时可达到的比特率。

以下代码样例显示了使用此适配器的工作流步骤。


代码样例 14-3 使用 AddCapabilityAdapter 的样例工作流步骤
<step id="100" name="Cap" adapter="AddCapabilityAdapter">
  <desc>
    Add audio/mp3-24kbps to ccppaccept capability when
      the edition name contains "-24kbps"
  </desc>
  <argument-list>
    <argument name="AddCapability.EditionNameRegEx" kind="direct" 
        value="-24kbps"/>
    <argument name="AddCapability.CapabilityName" kind="direct"
        value="ccppaccept"/>
    <argument name="AddCapability.CapabilityValue" kind="direct"
        value="audio/mp3-24kbps"/>
   </argument-list>
</step>

 

必须在 AddDerivedEditionAdapter 步骤前面执行此步骤,以便将此步骤中的值添加到派生版本中。否则,将不会保存这些值。

14.3.2 使用“外部到内部”适配器

ExternalToInternalAdapter 适配器可用于将通过内容聚集器界面提交的外部托管内容转换为本地内容。

以下代码样例显示了使用此适配器的工作流步骤。


代码样例 14-4 使用 ExternalToInternalAdapter 的样例工作流步骤
<step id="300" name="EtoI" adapter="ExternalToInternalAdapter">
  <desc>
    Convert external content to internal content when
    the edition name contains "-extint"
  </desc>
  <argument-list>
    <argument name="ExternalToInternal.EditionNameRegEx" kind="direct" 
      value="-extint"/>
  </argument-list>
</step>

 

必须在 AddDerivedEditionAdapter 步骤前面执行此步骤,以便将转换结果传播到派生版本。否则,将不会保存这些值。

14.3.3 使用“处理 OMA DRM 消息”适配器

ProcessOmaDrmMessageAdapter 适配器可用于接受 DRM 消息中预包装了 OMA DRM 1.0 保护功能的打包内容。此适配器将受保护内容的 MIME 类型添加为必需的设备功能。



注 - 对于预包装了 OMA DRM 保护功能的内容,不能再为其应用其他保护。如果要提交预包装的内容,请确保 Catalog Manager 管理员为内容类型指定的 DRM 方法为



以下代码样例显示了使用此适配器的工作流步骤和标准。


代码样例 14-5 使用 ProcessOmaDrmMessageAdapter 的样例工作流步骤和标准
<workflow id="5" name="OMA DRM Message Parser" activation="manual">
  <desc>Parse submitted DRM Message and update appropriate content 
    capabilities depending on plain content wrapped inside DRM message</desc>
  <step-list>
    <step id="1" name="ProcessOMADRMMessage" 
      adapter="ProcessOmaDrmMessageAdapter">
          <desc>This step parses the DRM wrapped content</desc>
    </step>
    <step id="2" name="AddingDerivedEdition" 
        adapter="AddDerivedEditionAdapter">
    <desc>This step adds a downloadable edition derived from the original</desc>
      <argument-list>
        <argument name="AddDerivedEdition.EditionNameSuffix" 
            kind="indirect" value="editionnamesuffix"/>
        <argument name="AddDerivedEdition.StoreOriginalBytes" kind="direct" 
           value="true"/>
        </argument-list>
    </step>
  </step-list>
</workflow>
 
<criteria id="5" name="isDrmMessage">
  <desc>A sample validation workflow for a submitted OMA DRM Message</desc>
  <workflow-list>
    <workflow id="4">
      <argument-list>
       <argument name="editionnamesuffix" value="_OMADrmWrappedDownloadable"/>
      </argument-list>
    </workflow>
  </workflow-list>
  <criterion name="mime-type" value="application/vnd.oma.drm.message"/>
</criteria>

 

14.3.4 使用“设置版本权重”适配器

SetEditionWeightAdapter 适配器可用于指定内容版本的版本权重。在功能匹配期间,可以使用版本权重来确定将哪个版本传送到与多个内容版本匹配的设备。如果设备与多个版本匹配,则会传送版本权重最高的版本。

以下代码样例显示了使用此适配器的工作流步骤。


代码样例 14-6 使用 SetEditionWeightAdapter 的样例工作流步骤
<step id="200" name="Weight" adapter="SetEditionWeightAdapter">
  <desc>
    Set the edition weight to 100 when
    the edition name contains "-24kbps"
  </desc>
  <argument-list>
    <argument name="SetEditionWeight.EditionNameRegEx" kind="direct"
      value="-24kbps"/>
    <argument name="SetEditionWeight.WeightValue" kind="direct" value="100"/>
  </argument-list>
</step>

 

必须在 AddDerivedEditionAdapter 步骤前面执行此步骤,以便将此步骤中的值添加到派生版本中。否则,将不会保存这些值。


14.4 指定工作流标准

每个工作流都必须至少有一组标准,以标识要执行该工作流的内容。此标准将通过 $CDS_HOME/deployment/deployment-name/conf/SubmissionVerifierWorkflows.xml 文件中的工作流进行定义。

一项内容只执行一个工作流。执行的工作流将由内容匹配的第一组标准确定,因此标准的顺序很重要。如果一组标准中指定了多个标准,则对于要视为匹配的内容而言,所有标准都必须满足。

代码示例 14-7 显示了受版权保护的外部托管内容工作流的样例标准。


代码示例 14-7 受版权保护的外部内容工作流的标准列表

<criteria id="3" name="isCopyrighted">
  <desc>
    Sample criteria for copyrighted external content.
    Note: only external content can be copyrighted.
    Note: the only DRM supported for copyrighted content is None.
    Note: criterion names and values are case insensitive.
    Note: for location-type, specify e for external or i for
     internal.
  </desc>
  <workflow-list>
    <workflow id="4">
      <argument-list>
        <argument name=”editionnamesuffix value=”_Copyrighted”/>
      </argument-list>
    </workflow>
  </workflow-list>
  <criterion name="location-type" value="e"/>
  <criterion name="content-type" value="ringtone"/>
  <criterion name="mime-type" value="audio/mp3"/>
  <criterion name="developer-plan" value="copyrightplan"/>
  <criterion name="developer" value="composer"/>
</criteria>

 

编辑现有标准集的标准或者创建其他的标准集以标识希望由工作流处理的内容。对于每一组新的标准:

将以下属性的任意组合用作一组标准的标准。如果内容与指定的所有项目匹配,则执行工作流。