Contribuindo com Seu Próprio Plug-in de Primitiva de Mediação

É possível desenvolver suas próprias primitivas de mediação e inseri-las na paleta do editor de Fluxo de Mediação. Em seguida, os desenvolvedores de integração podem usar essas primitivas de mediação da mesma forma que as primitivas de mediação fornecidas, por exemplo, Filtro de Mensagens.

Os tópicos a seguir descrevem brevemente as ações que você precisa executar para desenvolver sua própria primitiva de mediação, incluir a primitiva na paleta do Editor de Fluxo de Mediação e implementar as primitivas. Em seguida, usamos um exemplo para mostrar as etapas necessárias e fornecemos links para documentação de referência.

Nota: Estas etapas podem ser alteradas em releases futuros e poderá ser necessário algum esforço para reativar suas contribuições em releases futuros.

Criar um Plug-in

Crie um plug-in para suas primitivas no PDE (Plug-in Development Environment) do Eclipse, com estas definições:
  1. Criar um projeto de plug-in
  2. Criar estas extensões no plugin.xml:
    • com.ibm.wbit.sib.mediation.primitives.registry.mediationPrimitiveHandlers - define os terminais de sua primitiva e identifica o arquivo de propriedades onde as propriedades da primitiva são definidas e o arquivo .mednode que você gerará no tópico "Gerar os Metadados da Mediação".
    • com.ibm.wbit.sib.mediation.primitives.registry.mediationPrimitiveUIContribution - constrói o medationPrimitiveHandler e inclui informações para inserir o medationPrimitiveHandler na paleta do editor de Fluxo de Mediação.
    Notas:
    • O typeName e o typeNamespace do medationPrimitiveHandler e o mediationPrimitiveUIContribution devem ser os mesmos para permitir que o mediationPrimitiveUIContribution seja associado ao medationPrimitiveHandler .
    • O typeNamespace deve iniciar com mednode://mednodes e terminar com FileName.mednode. Um arquivo com esse nome será criado quando os metadados de mediação forem gerados.
  3. Crie um arquivo XML de grupo de propriedades e defina as propriedades da primitiva da mediação no arquivo XML. Para sua referência, o esquema para esse arquivo é anexado na seção Referências no fim deste documento.

Gerar os Metadados de Mediação

Gere os metadados de mediação (arquivo .mednode) para a primitiva de mediação usando a visualização Geração de Metadados de Mediação. O arquivo .mednode contém a representação do tempo de execução dos mediationPrimitiveHandlers e deve ser colocado na raiz do projeto Java criado na Etapa 3.

Código Java do Autor

Crie um projeto Java e escreva o código para implementar sua primitiva de mediação.

  1. Crie um projeto Java
  2. Inclua o WebSphere ESB Server v6.0 da biblioteca no caminho de construção do projeto.
  3. Copie o arquivo .mednode do projeto do plug-in na raiz do projeto Java.
  4. Crie uma classe Java que estenda o com.ibm.wsspi.sibx.mediation.esb.ESBMediationPrimitive e defina um método getter e setter para cada propriedade definida no arquivo de grupo de propriedades.

    Nota: os nomes dos métodos getter e setter devem corresponder aos nomes das propriedades. Por exemplo, se um nome de propriedade for value, os métodos getter e setter devem ser denominados getValue() e setValue().

  5. Escreva seu código de implementação Java para a primitiva de mediação no método mediate() herdado. O método de mediação usa um InputTerminal e um DataObject. Use o InputTerminal apenas de você tiver vários terminais de entrada. O DataObject é sua mensagem. É possível usar os getters e setters na interface DataObject para ler e gravar os valores em suas mensagens, identificados pela expressão XPath. O DataObject faz parte do padrão emergente do SDO (Service Data Object). Esse parâmetro de mensagem também pode ser lançado em um ServiceMessageObject no pacote com.ibm.websphere.sibx.smobo, parte das APIs do Service Message Object. Essa interface é útil para acessar seções individuais do objeto de mensagem de serviço, como o corpo, o contexto e cabeçalhos. Este exemplo mostrará como disparar uma mensagem para um DataObject do terminal de saída. Consulte a seção Referência no final deste documento para obter links para as APIs Service Data Object e Service Message Object APIs.

Implementar o Plug-in

Implemente o plug-in para que suas primitivas de mediação apareçam na paleta do Editor de Fluxo de Mediação:

  1. Configure propriedades de construção para o projeto de plug-in. Verifique se as propriedades de Construção Binária incluem as pastas mednodes e propertygroups.
  2. Importe os ícones de primitivas no projeto de plug.in.
  3. Exporte o projeto de plug-in como opção Plug-ins e Fragmentos Implementáveis para o diretório WIDInstallDir\wstools\eclipse
  4. Encerre o WebSphere Integration Developer.
  5. Reinicie o WebSphere Integration Developer usando a opção –clean.
  6. Abra um componente de fluxo de mediação no Editor de Fluxo de Mediação. O ícone da primitiva deve aparecer na paleta.
  7. Arraste o ícone da primitiva para o canvas do editor e visualize as propriedades na visualização Propriedades.

Implementar as primitivas no tempo de execução

Para implementar suas primitivas de mediação no tempo de execução do WebSphere Enterprise Service Bus ou do WebSphere Process Server:

  1. Exporte o projeto Java como um jar, por exemplo, myPrimitives.jar. Na pasta raiz, selecione apenas .mednode, mas mantenha a classe Java selecionada.

    Nota: os arquivos .mednode devem estar dentro da raiz do jar implementado, não em um subdiretório.

  2. Selecione o diretório WAS_HOME/lib/ext onde o tempo de execução do WebSphere pode acessar as classes no escopo do carregador de classes correto.

Exemplo

Crie um projeto de plug-in

  1. Abra a perspectiva do PDE em Janela > Abrir Perspectiva > Outra... e escolha Desenvolvimento de Plug-in na lista fornecida. Se você não vir o PDE, marque a opção Mostrar Tudo.
  2. Crie um projeto de plug-in em Arquivo > Novo > Projeto de Plug-in.
  3. Digite com.ibm.websphere.esb.mediation.example.contribution como o nome do projeto. Mantenha as opções padrão e clique em Avançar
  4. Desmarque a opção para gerar uma classe Java e clique em Concluir.

Edite o plugin.xml

Abra o plugin.xml no editor de Manifesto de Plug-in e alterne para a página Extensões.

  1. Clique em Adicionar. No assistente Nova Extensão, desmarque Mostrar Apenas Pontos de Extensão de Plug-ins Necessários para visualizar a lista de plug-ins.
  2. Selecione com.ibm.wbit.sib.mediation.primitives.registry.mediationPrimitiveHandlers. Clique em Concluir. Aparece uma entrada na lista Todas as Extensões.
  3. Clique com o botão direito do mouse em com.ibm.wbit.sib.mediation.primitives.registry.mediationPrimitiveHandlers e selecione Novo > medationPrimitiveHandler
  4. Um medationPrimitiveHandler é incluído para a extensão.
  5. Selecione a rotina de tratamento e configure suas propriedades conforme mostrado a seguir:



    Nota: o espaço de nomes deve iniciar com mednode://mednodes.
  6. Inclua uma descrição curta e uma longa e categorias de terminal para a rotina de tratamento selecionando-a e clicando com o botão direito do mouse em > Novo....
  7. Selecione a descrição curta e clique no Corpo do Texto na parte inferior da página Extensões. Digite uma descrição curta para a primitiva - "Converte um valor na moeda selecionada". Clique em Adicionar. De maneira semelhante, inclua texto para a descrição longa - "Esta primitiva converte um valor da mensagem de entrada na moeda selecionada de uma lista de moedas predefinidas."
  8. Selecione cada terminal, e, na seção Detalhes à direita, configure seu tipo (entrada, saída e falha neste exemplo). Digite um nome para cada terminal (entrada, saída e falha neste exemplo). Observe que o terminal de falha deve ser denominado falha.



  9. Inclua outra extensão com.ibm.wbit.sib.mediation.primitives.registry.mediationPrimitiveUIContribution
  10. Clique com o botão direito do mouse em com.ibm.wbit.sib.mediation.primitives.registry.mediationPrimitiveUIContribution e selecione Novo > medationPrimitiveUIContribution
  11. Configure as propriedades de medationPrimitiveUIContribution conforme mostrado a seguir e salve:

Crie as pastas necessárias no projeto do plug-in

  1. Crie uma pasta denominada icons no projeto de plug-in e coloque seus ícones nela. O ícone pequeno (16x16) aparecerá na paleta. O ícone grande (32 x 32) aparecerá no canvas.
  2. Crie uma pasta denominada propertygroups no projeto de contribuição do plug-in e crie um arquivo XML de grupo de propriedades nessa pasta em Arquivo > Novo > Outro > XML. > XML. Clique em Avançar. Opte por criar um arquivo XML a partir do início. Clique em Avançar. Denomine o arquivo como CurrencyConverterPropertyGroup.xml e clique em Concluir.

Inclua propriedades no arquivo XML

No CurrencyConverterPropertyGroup.xml descreveremos as propriedades dessa nova primitiva, de forma a derivar a UI para a página Detalhes da visualização de propriedades no Editor de Fluxo de Mediação. A classe Java deve ter métodos getter e setter que correspondam a cada uma dessas propriedades. Para obter informações adicionais, consulte Elementos do Arquivo XML de Propriedades e Arquivo de Definição do Esquema do Grupo de Propriedades.

Inclua as propriedades necessárias no CurrencyConverterPropertyGroup.xml inserindo o seguinte código XML:
<pg:BasePropertyGroups name="CacheReaderPropertyGroups" resourceBundle="ESBMediationExamples" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pg="http://www.ibm.com/propertygroup/6.0.1">
<propertyGroup name="CurrencyConverterPropertyGroup" xsi:type="pg:BasePropertyGroup" >
<!-- caminho de moeda usando XPathProperty -->
<property name="currencyPath" displayName="Currency Path" defaultValue="/body" required="true" propertyType="String" id="com.ibm.propertygroup.ext.ui.XPathProperty" xsi:type="pg:ConstraintSingleValuedProperty">
<descrição>
Uma expressão XPath para o valor da moeda de entrada.
      </description>
</property>
<!-- taxa da moeda usando Combo box -->
<property name="currencyRate" displayName="Currency" required="true" defaultValue="1.0" propertyType="float" xsi:type="pg:ConstraintSingleValuedProperty">
<descrição>
A taxa usada para converter o valor da moeda de entrada.
</description>
<validValue value="1.0" displayValue="USD"/>
<validValue value="1.15091" displayValue="CAD"/>
<validValue value="0.836371" displayValue="EUR"/>
<validValue value="119.895" displayValue="JPY"/>
<validValue value="8.07560" displayValue="CNY"/>
</property>
</propertyGroup>
</pg:BasePropertyGroups>

Gerar Metadados

Ative o workbench de tempo de execução no PDE:
  1. No menu, selecione Executar > Executar como > Workbench do Tempo de Execução. Se necessário, crie uma nova configuração, selecionando Workbench de Tempo de Execução e clicando em Novo. Aceite os padrões. Clique em Executar.
  2. No novo IDE lançado, clique em Janela > Mostrar Visualização > Outra > Desenvolvimento de Mediação > Geração de Metadados de Mediação.
  3. As primitivas de mediação criadas são exibidas aqui. Use essa visualização para gerar um arquivo .mednode para a primitiva. Selecione as primitivas desejadas e clique em Gerar. Um status de OK indica que o arquivo .mednode foi gerado com êxito.
  4. Um arquivo denominado CurrencyConverter.mednode é criado na pasta mednodes do projeto do plug-in. Pode ser necessário atualizar a visualização para ver esse arquivo.

Criar o Código Java

  1. Crie um projeto Java em Arquivo > Novo > Projeto > Projeto Java. Clique em Avançar.Digite o nome do projeto, com.ibm.websphere.esb.mediation.example.logic, e clique em Avançar.
  2. Alterne para a página Bibliotecas e clique em Incluir Biblioteca. Selecione WebSphere ESB Server v6.0 e clique em Avançar. Marque a opção para configurar o caminho de classe do WebSphere ESB Server. Clique em Concluir.
  3. Copie o CurrencyConverter.mednode do projeto do plug-in para a raiz do projeto Java.
  4. Alterne para a perspectiva Java. Selecione o projeto Java e clique em Arquivo > Novo > Classe. Digite com.ibm.websphere.esb.mediation.example.logic como o nome do pacote e CurrencyConverterMediation como o nome da classe. Clique em Concluir.Copie este código no CurrencyConverterMediation:
    package com.ibm.websphere.esb.mediation.example.logic;
    import com.ibm.wsspi.sibx.mediation.InputTerminal;
    import com.ibm.wsspi.sibx.mediation.MediationBusinessException;
    import com.ibm.wsspi.sibx.mediation.MediationConfigurationException;
    import com.ibm.wsspi.sibx.mediation.OutputTerminal;
    import com.ibm.wsspi.sibx.mediation.esb.ESBMediationPrimitive;
    import commonj.sdo.DataObject;
    /**
    * Esta mediação converte um valor de moeda em outro valor de moeda.
    */
    public class CurrencyConverterMediation extends ESBMediationPrimitive {
    private static final String OUTPUT_TERMINAL_NAME = "out";
    private String currencyPath;
    private float currencyRate;
    /**
    * Construtor padrão.
    */
    public CurrencyConverterMediation() {
    super();
    }
    /**
    * @return Retorna o currencyPath.
    */
    public String getCurrencyPath() {
    return currencyPath;
    }
    /**
    * @param currencyPath
    * O currencyPath a ser configurado.
    */
    public void setCurrencyPath(String currencyPath) {
    this.currencyPath = currencyPath;
    }
    /**
    * @return retorna a currencyRate.
    */
    public float getCurrencyRate() {
    return currencyRate;
    }
    /**
    * @param currencyRate
    * A currencyRate a ser configurada.
    */
    public void setCurrencyRate(float currencyRate) {
    this.currencyRate = currencyRate;
    }
    /*
    * (non-Javadoc)
    *
    * @see com.ibm.wsspi.sibx.mediation.Mediation#mediate(com.ibm.wsspi.sibx.mediation.InputTerminal,
    * commonj.sdo.DataObject)
    */
    public void mediate(InputTerminal inputTerminal, DataObject message)
    throws MediationConfigurationException, MediationBusinessException {
    // recupera o valor da moeda de entrada
    float inputCurrencyValue = message.getFloat(getCurrencyPath());
    // converte no valor da nova moeda
    float newCurrencyValue = inputCurrencyValue * getCurrencyRate();
    // atualiza o valor da nova moeda para a mensagem
    message.setFloat(getCurrencyPath(), newCurrencyValue);
    // obtém o terminal de saída dos serviços de mediação
    OutputTerminal outTerminal = getMediationServices().getOutputTerminal(
    OUTPUT_TERMINAL_NAME);
    if (outTerminal != null) {
    // dispara a mensagem para o terminal de saída
    outTerminal.fire(message);
    }
    }
    }
Implementar o Plug-in
  1. Abra o arquivo build.properties do projeto de plug-in no Editor de Propriedades de Construção e verifique se as pastas mednodes e propertygroups estão selecionadas em Construção Binária.
  2. Exporte o projeto como Plug-ins e Fragmentos Implementáveis. Selecione para exportar como uma estrutura de diretório e especifique o diretório de destino WIDInstall\wstools\eclipse.
  3. Implemente o projeto Java no UTE exportando-o como um jar para WIDInstall\runtimes\bi-v6\lib\ext, se planejar testar a primitiva em um fluxo de mediação.
  4. Encerre o WebSphere Integration Developer e inicie-o usando a opção -clean.
  5. Abra um componente de fluxo de mediação no Editor de Fluxo de Mediação. O ícone da primitiva de mediação CurrencyConverter deve aparecer no Ícone CurrencyConverter da paleta.
  6. Arraste o ícone da primitiva para o canvas do editor e visualize as propriedades na visualização Propriedades. Visualização Propriedades do CurrencyConverter

Implementar no Tempo de Execução

Exporte o projeto Java como um jar, por exemplo, myPrimitives.jar. Na pasta raiz, selecione .mednode apenas, mas mantenha a classe Java selecionada. Exporte o jar para WAS_HOME/lib/ext.

Referências

Para obter informações sobre as APIs a seguir, consulte a seção Referência nas informações do WebSphere Integration Developer 6.0.1:
  • APIs do SMO (Service Message Object)
  • SPIs do Mecanismo de Mediação
  • SPIs de Ação do Fluxo de Mediação
  • SPIs de Armazenamento de Contexto de Mediação

Para obter informações sobre APIs do Service Data Object, consulte http://download.eclipse.org/tools/emf/sdo/javadoc/

Elementos do Arquivo XML de Propriedades

Você deve criar um arquivo XML de definição de propriedades para definir as propriedades de sua primitiva de mediação. Esse arquivo XML deve obedecer ao esquema definido no propertygroup.xsd no diretório <Widinstall>\eclipse\plugins\com.ibm.propertygroup.ext.model/src/model. As etapas a seguir são as etapas comuns para criar o arquivo XML de definição de propriedades.
  1. Definindo propertyGroups:
    Cada arquivo XML de definição de propriedades contém um e apenas um elemento propertyGroups que contém uma seqüência de zero ou mais elementos propertyGroup.
    <pg:BasePropertyGroups name="myGroups" resourceBundle="mypacakage.myProperties">
    Tabela 1. Atributos de propertyGroups
    Atributo Descrição
    nome Nome do grupo de propriedades. Esse nome não será exibido no Editor de Fluxo de Mediação.
    resourceBundle O pacote de recursos que será carregado para interpretar o valor de uma cadeia. Ele é usado para globalização.
  2. Definindo Elementos propertyGroups
    Cada elemento propertyGroup é representado como uma página tabulada horizontal dentro da página Detalhes da visualização Propriedades. Cada propertyGroup pode conter várias propriedades. Uma propriedade pode ser uma propriedade padrão ou uma propriedade customizada.
    <propertyGroup name="myGroup" xsi:type="pg:BasePropertyGroup">
    Tabela 2. Atributos de propertyGroup
    Atributo Descrição
    nome Nome do grupo de propriedades. Se houver mais de um propertyGroup, cada elemento propertyGroup será processado como página tabulada na página Detalhes. O atributo name se torna o nome da página tabulada.
  3. Definindo Propriedades Padrão Simples
    As propriedades padrão a seguir foram predefinidas na definição do esquema propertygroups. As duas propriedades têm os mesmos atributos.
    Tabela 3. Propriedades Padrão e seus Atributos
    Propriedade Atributo Descrição
    1. ConstraintSingleValuedProperty - Uma propriedade de avaliação única com várias regras de validação de entrada do usuário
    2. ConstraintMultiValuedProperty - Propriedade multi-avaliada. Todos os valores compartilham o mesmo tipo
    name / displayName O nome é o identificador de uma propriedade. DisplayName é usado como uma etiqueta anterior ao controle de entrada da propriedade.
    descrição Exibida como texto de dicas de ferramenta
    propertyType Define o tipo do valor (String / Boolean / Float / Integer)
    defaultValue O valor padrão da propriedade
    hidden Define se a propriedade é ocultada ou mostrada
    readOnly Define se a propriedade é de leitura
    requerido Indica se a propriedade requer um valor
    sensitive Se o tipo do valor for String, esse atributo determinará se a distinção entre maiúsculas e minúsculas é feita
    validValuesEditable Define se um usuário tem permissão para inserir um valor que é diferente de valores definidos por validValues
    validValues Uma lista de valores válidos
    padrão Se o tipo do valor for String, o editor fará uma correspondência de padrões para validar a entrada do usuário
    maxLength Se o tipo do valor for String, o editor limitará o tamanho que pode ser inserido pelo usuário
    minValue / maxValue Se o tipo do valor for Integer ou Float, o editor executará uma verificação de intervalo na entrada do usuário.
    validValueGeneratorClass Aponta para uma classe que é responsável por gerar dinamicamente valores válidos. A classe deve implementar a interface com.ibm.propertygroup.ext.api .IValidValuesGenerator
  4. Definindo uma Propriedade de Tabela
    Cada propriedade de tabela pode consistir em várias colunas, cada uma das quais é uma propriedade de avaliação única, como ConstraintSingleValuedProperty.
    <property name="filters" displayName="% displayname" xsi:type="pg:TableProperty">
    <column name="pattern" required="true" .../>
    <column name="terminalName" required="true" .../>
    </property>
  5. Definindo uma Propriedade Customizada
    A classe de implementação deve implementar com.ibm.propertygroup.ext.ICustomProperty
    <property name="myCustomProperty" class=â€MyCustomImpl†xsi:type="pg:CustomProperty">
  6. Incluindo Qualificadores em Propriedades
    O modelo de propriedade descrito acima é neutro para qualquer mecanismo de exibição da UI ou infra-estrutura de processamento. No entanto, em determinados cenários, algumas informações dependentes da UI ou do tempo de execução devem estar presentes. Por exemplo, você pode definir o layout da tabela para uma propriedade da tabela. Ou você pode desejar instruir o tempo de execução para executar manipulação especial ao processar determinadas propriedades. Um qualificador é introduzido para atender a esse objetivo. Você pode anexar tantos qualificadores em uma propriedade quantos desejar, desde que eles sejam válidos para a UI e para o tempo de execução. Por exemplo, você pode anexar um TableLayoutQualifier a um TableProperty.
    <property name="filters" xsi:type="pg:TableProperty">
    <qualifier preferredHeight="100" xsi:type="pg:TableLayoutQualifier">
    <column name="pattern" preferredWidth="100" xsi:type="pg:TableColumnQualifier"/>
    <column name="terminalName" preferredWidth="200" xsi:type="pg:TableColumnQualifier"/>
    </qualifier>
    ...
    </property>

Arquivo de Definição do Esquema do Grupo de Propriedades

O arquivo de definição do esquema do grupo de propriedades denominado propertygroup.xsd mostrado a seguir está no diretório Widinstall\eclipse\plugins\com.ibm.propertygroup.ext.model/src/model.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:propertygroup="http://www.ibm.com/propertygroup/6.0.1" targetNamespace="http://www.ibm.com/propertygroup/6.0.1">
<element name="propertyGroups" type="propertygroup:BasePropertyGroups"/>
<element name="description" type="string"/>
<complexType name="PersistentFormatter">
</complexType>
<complexType name="StringFormatter">
<complexContent>
<extension base="propertygroup:PersistentFormatter">
<attribute name="escapeCharacter" type="token" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="StringListFormatter">
<complexContent>
<extension base="propertygroup:StringFormatter">
<attribute name="separator" type="token" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="StringTableFormatter">
<complexContent>
<extension base="propertygroup:StringFormatter">
<attribute name="rowSeparator" type="token" use="optional"/>
<attribute name="columnSeparator" type="token" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="Qualifier">
</complexType>
<complexType name="TableColumnQualifier">
<complexContent>
<extension base="propertygroup:Qualifier">
<attribute name="name" type="token" use="required"/>
<attribute name="preferredWidth" type="token" use="required"/>
</extension>
</complexContent>
</complexType>
<complexType name="TableLayoutQualifier">
<complexContent>
<extension base="propertygroup:Qualifier">
<choice>
<element maxOccurs="unbounded" minOccurs="0" name="column" type="propertygroup:TableColumnQualifier"/>
</choice>
<attribute name="preferredHeight" type="token" use="required"/>
</extension>
</complexContent>
</complexType>
<complexType name="PropertyClassificationQualifier">
<complexContent>
<extension base="propertygroup:Qualifier">
<attribute name="name" type="token" use="required"/>
</extension>
</complexContent>
</complexType>
<complexType name="PropertyDescriptor">
<choice>
<element ref="propertygroup:description" minOccurs="0"/>
<element name="persistentFormatter" type="propertygroup:PersistentFormatter" minOccurs="0"/>
<element maxOccurs="unbounded" minOccurs="0" name="qualifier" type="propertygroup:Qualifier"/>
</choice>
<attribute name="id" type="token" use="optional"/>
<attribute name="name" type="token" use="required"/>
<attribute name="displayName" type="token" use="optional"/>
</complexType>
<complexType name="BasePropertyDescriptor">
<complexContent>
<extension base="propertygroup:PropertyDescriptor">
</extension>
</complexContent>
</complexType>
<complexType name="BaseProperty">
<complexContent>
<extension base="propertygroup:BasePropertyDescriptor">
<attribute name="validationMessage" type="token" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="BaseNodeProperty">
<complexContent>
<extension base="propertygroup:BaseProperty">
<sequence>
<element maxOccurs="0" minOccurs="0" name="children" type="propertygroup:BaseNodeProperty"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ValidValue">
<sequence>
<element ref="propertygroup:description" minOccurs="0"/>
</sequence>
<attribute name="displayValue" type="token" use="optional"/>
<attribute name="value" type="token" use="required"/>
</complexType>
<complexType name="BaseSingleTypedProperty">
<complexContent>
<extension base="propertygroup:BaseProperty">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="validValue" type="propertygroup:ValidValue"/>
</sequence>
<attribute name="defaultValue" type="token" use="optional"/>
<attribute name="propertyType" type="token" use="required"/>
<attribute name="expert" type="boolean" use="optional"/>
<attribute name="hidden" type="boolean" use="optional"/>
<attribute name="readOnly" type="boolean" use="optional"/>
<attribute name="required" type="boolean" use="optional"/>
<attribute name="sensitive" type="boolean" use="optional"/>
<attribute name="validValuesEditable" type="boolean" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="BaseMultiValuedProperty">
<complexContent>
<extension base="propertygroup:BaseSingleTypedProperty">
</extension>
</complexContent>
</complexType>
<complexType name="BaseBoundedMultiValuedProperty">
<complexContent>
<extension base="propertygroup:BaseMultiValuedProperty">
<attribute name="boundedSize" type="token" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="File">
<attribute name="extension" type="token" use="optional"/>
<attribute name="pattern" type="token" use="optional"/>
</complexType>
<complexType name="MultiFileProperty">
<complexContent>
<extension base="propertygroup:BaseMultiValuedProperty">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="fileExtension" type="propertygroup:File"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="MultiFolderProperty">
<complexContent>
<extension base="propertygroup:BaseMultiValuedProperty">
</extension>
</complexContent>
</complexType>
<complexType name="ConstraintMultiValuedProperty">
<complexContent>
<extension base="propertygroup:BaseBoundedMultiValuedProperty">
<attribute name="pattern" type="token" use="optional"/>
<attribute name="minValue" type="integer" use="optional"/>
<attribute name="maxValue" type="integer" use="optional"/>
<attribute name="maxLength" type="integer" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="BaseSingleValuedProperty">
<complexContent>
<extension base="propertygroup:BaseSingleTypedProperty">
</extension>
</complexContent>
</complexType>
<complexType name="FileProperty">
<complexContent>
<extension base="propertygroup:BaseSingleValuedProperty">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="fileExtension" type="propertygroup:File"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="FolderProperty">
<complexContent>
<extension base="propertygroup:BaseSingleValuedProperty">
</extension>
</complexContent>
</complexType>
<complexType name="ConstraintSingleValuedProperty">
<complexContent>
<extension base="propertygroup:BaseSingleValuedProperty">
<attribute name="pattern" type="token" use="optional"/>
<attribute name="minValue" type="integer" use="optional"/>
<attribute name="maxValue" type="integer" use="optional"/>
<attribute name="maxLength" type="integer" use="optional"/>
<attribute name="validValuesGeneratorClass" type="token" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="PropertyGroup">
<complexContent>
<extension base="propertygroup:BaseProperty">
</extension>
</complexContent>
</complexType>
<complexType name="BasePropertyGroup">
<complexContent>
<extension base="propertygroup:PropertyGroup">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="property" type="propertygroup:PropertyDescriptor"/>
<element maxOccurs="unbounded" minOccurs="0" name="customProperty" type="propertygroup:CustomProperty"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="CustomPropertyGroup">
<complexContent>
<extension base="propertygroup:PropertyGroup">
<attribute name="class" type="token" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="BasePropertyGroups">
<complexContent>
<extension base="propertygroup:BaseProperty">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="propertyGroup" type="propertygroup:PropertyGroup"/>
</sequence>
<attribute name="resourceBundle" type="token" use="optional"/>
</extension>
</complexContent>
</complexType>
<complexType name="BaseTreeProperty">
<complexContent>
<extension base="propertygroup:BaseProperty">
</extension>
</complexContent>
</complexType>
<complexType name="TableProperty">
<complexContent>
<extension base="propertygroup:PropertyDescriptor">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="column" type="propertygroup:BaseSingleTypedProperty"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="TreeProperty">
<complexContent>
<extension base="propertygroup:PropertyDescriptor">
<sequence>
<element maxOccurs="1" minOccurs="0" name="root" type="propertygroup:BaseNodeProperty"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="CustomProperty">
<attribute name="class" type="token" use="required"/>
</complexType>
</schema>
Conceitos relacionados
Visão Geral dos Serviços de Mediação
Editor do Fluxo de Mediação
Tarefas relacionadas
Criando um Componente do Fluxo de Mediação
Abrindo o Editor do Fluxo de Mediação
Conectando Operações de Origem e de Destino
Construindo Fluxos de Pedido e de Resposta
Implementando uma Primitiva de Mediação Customizada
Testando e Depurando Módulos de Mediação

Informações relacionadas

Tutorial: Criar um Fluxo de Mediação
Amostras: Editor do Fluxo de Mediação

Feedback
(C) Direitos Autorais IBM Corporation 2005, 2006. Todos os Direitos Reservados.