Writing a Content Checker  Locate

In this section, we will show you how to create a content checker. The content checker provides an approver the ability to programmatically check data for approval. We assume you are familiar with Approval Process. The Approval Process is described in the following sections:

We will show you how to create and deploy a content checker on the following example: an Approver set a rule that each business entity name must start with prefix "org_". Data that does not satisfy this rule cannot be approved (that is, copied to a discovery registry). The content checker is executed when a approver clicks on the Approve button in the Approve request page of the BEA AquaLogic Service Registry console.

To set up this optional content checking:

  1. Write a class that implements the class org.systinet.uddi.approval.checker.v3.CheckerApi.

  2. Deploy the implementation class to the BEA AquaLogic Service Registry.

  3. Register the implementation of the content checker class in the BEA AquaLogic Service Registry's data.

Now, we will look at the steps in detail:

  1. Write a class that implements the org.systinet.uddi.approval.checker.v3.CheckerApi

    1. Create the content checker class as shown in Example 16.

    2. Compile the CheckerApiImpl.java, and add jars from the directory PUBLICATION_REGISTRY_HOME/dist to the class path.

  2. Deploy the implementation class to the BEA AquaLogic Service Registry.

    1. Copy the CheckerApiImpl.class to the file PUBLICATION_REGISTRY_HOME/app/uddi/services/Wasp-inf/lib/approval_staging_v3.jar to the folder com/systinet/uddi/approval/v3/approver inside the jar file.

    2. Shutdown the Publication Registry, delete the PUBLICATION_REGISTRY_HOME/work directory, and restart the Publication Registry.

  3. Register the implementation of the content checker class in the BEA AquaLogic Service Registry data.

    1. Log on to the Publication Registry as an approver. The content checker will be applicable to an approver who follows these steps:

    2. Publish the WSDL of the checker service:

      Publish the WSDL located at http://<host_name>:<http_port>/uddi/doc/wsdl/approval_checker.wsdl to a new or already existing business entity. Use the Advanced publishing mode and be sure to reuse the existing WSDL portType (tModel name:CheckerApi, tModel's key: uddi:systinet.com:uddi:service:porttype:approvalchecker). The WSDL service approval_checker_SoapService will be published under the business entity.

    3. Specify the checker in the access point of a new binding template under the approval_checker_SoapService service.

      Enter the value of access point which starts with the class: prefix and continue with the fully qualified class name. For example, class:com.systinet.uddi.approval.v3.approver.CheckerApiImpl.

Example 16.  Content Checker Implementation

// Copyright 2001-2005 Systinet Corp. All rights reserved.
// Use is subject to license terms.
package com.systinet.uddi.approval.v3.approver;

import org.systinet.uddi.InvalidParameterException;
import org.systinet.uddi.approval.checker.v3.CheckerApi;
import org.systinet.uddi.approval.checker.v3.struct.CheckRequest;
import org.systinet.uddi.approval.v3.ApprovalErrorCodes;
import org.systinet.uddi.approval.v3.ApprovalException;
import org.systinet.uddi.approval.v3.struct.ApprovalEntitiesDetail;
import org.systinet.uddi.approval.v3.struct.EntitiesDetail;
import org.systinet.uddi.client.v3.struct.*;

/**
 * Checks if a BE starts with org_
 */
public class CheckerApiImpl implements CheckerApi {


    public DispositionReport checkRequest(CheckRequest checkRequest)
            throws ApprovalException {

        try {
            ResultArrayList resultArrayList = new ResultArrayList();

            ApprovalEntitiesDetail approvalEntitiesDetail = 
                checkRequest.getApprovalEntitiesDetail();
            if (approvalEntitiesDetail != null) {
                EntitiesDetail entitiesDetail4Saving = 
                    approvalEntitiesDetail.getEntitiesDetail4Saving();
                BusinessEntityArrayList businessEntityArrayList = 
                    entitiesDetail4Saving.getBusinessEntityArrayList();
                if (businessEntityArrayList != null) {
                    for (int i = 0; i < businessEntityArrayList.size(); i++) {
                        BusinessEntity businessEntity = businessEntityArrayList.get(i);
                        if (businessEntity != null) {
                            NameArrayList nameArrayList = 
                                businessEntity.getNameArrayList();
                            for (int j = 0; j < nameArrayList.size(); j++) {
                                Name name = nameArrayList.get(j);
                                if (name != null && !name.getValue().startsWith("org_")) {
                                  resultArrayList.add(
                                      new Result(ApprovalErrorCodes.INVALID_DATA,
                                            new ErrInfo(ApprovalErrorCodes.getCode(
                                      ApprovalErrorCodes.INVALID_DATA),
                                      "Only business entities whose name start with the " + 
                                      "prefix \"org_\" are allowed" +
                                      " (BE [key: " + businessEntity.getBusinessKey() + 
                                      ", name: " + name.getValue() + "])"),
                                            KeyType.businessKey));
                                }
                            }
                        }
                    }
                }
            }

            if (resultArrayList.size() > 0) {
                return new DispositionReport(resultArrayList);
            } else {
                return DispositionReport.DISPOSITION_REPORT_SUCCESS;
            }
        } catch (InvalidParameterException e) {
            // should not occur
            throw new ApprovalException(ApprovalErrorCodes.FATAL_ERROR, e.getMessage());
        }

    }
}