O Stephen Thomas tem um excelente post sobre a utilização de xpath para aceder a partes de mensagens em orquestrações, mas há questões que se levantam repetidamente e que talvez não fiquem explícitas naquele texto.

Supondo que temos uma mensagem com um determinado campo que promovemos como Distinguished Field:

– Se tentarmos aceder ao seu valor com "mensagem.campo", e o nó respectivo não existir na mensagem, o valor devolvido é null;

– Se usarmos uma expressão xpath com a função string (ex: xpath(mensagem,"string(/nome/@attribute)");), e o nó respectivo não existir, o valor devolvido é string.empty;

– Só podemos afectar o valor de Distinguished Fields dentro de Construct Shapes;

– Ao fazer a afectação de Distinguished Fields, o nó destino tem de existir na mensagem em causa, ou ocorre uma excepção. Isto sucede quer se se use a sintaxe mensagem.campo = valor;  quer usando o xpath().

Este último comportamento pode não ser o esperado, uma vez que a semelhança de sintaxe com o C# faz pensar numa simples afectação de um campo/propriedade de uma classe, mas pode acontecer sempre que o campo afectado não seja obrigatório no schema.

Um "truque" para contornar esta questão pode ser colocar nesses campos valores placeholder/dummy, para que depois as afectações funcionem, ou usando mapas ou aquando da própria instanciação da mensagem.

Nota final: caso não tenha já ficado claro, um Distinguished Field é apenas um alias para um xpath.

[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

LEAVE A REPLY

Please enter your comment!
Please enter your name here