WSM - Incorrect Flist Interpretation Due To The Missing '\N' Character (Doc ID 1336327.1)

Last updated on MAY 27, 2015

Applies to:

Oracle Communications Billing and Revenue Management - Version 7.2.1.0.0 to 7.2.1.0.1 [Release 7.2.1]
Information in this document applies to any platform.
***Checked for relevance on 16-Dec-2013***
***Checked for relevance on 27-MAY-2015***

Symptoms

Web Service Manager designated for the BRM 7.2.1 reads xml input flists incorrectly. The WSM is deployed on the Oracle WebLogic Server.

When an input flist created using Java PCM API, it does not contain the '\n' character after an xml array element, the nested elements are not read and passed to the BRM.


The scenario:


Using Java PCM API, we call an opcode which gets an input flist as XML (containing arrays(!)) on input parameters. We use the OpcodeCaller Java class of the Web Service Manager delivered with BRM. WSM is deployed on WebLogic 10.3 server.

The opcode is called using Java standalone client application. The WS Proxy is generated using an Ant script as it is described in the BRM 7.2.1 documentation.

In the code, the opcode is called using the following java code:

String wsdlUrl = "http://localhost:7001/infranetwebsvc/services/Infranet?wsdl";
InfranetWebServiceService service = new InfranetWebServiceService_Impl(wsdlUrl);

String createBAFlist2 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
"<flist>" +
"<POID>0.0.0.1 /account 491643 0</POID>" +
"<XX_FLD_ACCOUNT_NO>APAN-TEST-XSD1</XX_FLD_ACCOUNT_NO>" +
"<XX_FLD_ADDRESS elem=\"0\">" +
"<XX_FLD_ADDR_TYPE>Billing</XX_FLD_ADDR_TYPE>" +
"<XX_FLD_CITY>???????????</XX_FLD_CITY>" +
"<XX_FLD_COUNTRY>Greece</XX_FLD_COUNTRY>" +
"<XX_FLD_CO_NAME>l</XX_FLD_CO_NAME>" +
"<XX_FLD_NAME></XX_FLD_NAME>" +
"<XX_FLD_PREFECTURE>PREF1</XX_FLD_PREFECTURE>" +
"<XX_FLD_STREET>STREET 1</XX_FLD_STREET>" +
"<XX_FLD_ZIP>12345</XX_FLD_ZIP>" +
"</XX_FLD_ADDRESS>" +
"<XX_FLD_BILLING_DAY>1</XX_FLD_BILLING_DAY>" +
"<XX_FLD_CUSTOMER_PROFILE elem=\"0\">" +
"<XX_FLD_AFM>123456789</XX_FLD_AFM>" +
"<XX_FLD_CUSTOMER_NO>APAN-CUST</XX_FLD_CUSTOMER_NO>" +
"<XX_FLD_CUSTOMER_TYPE>0</XX_FLD_CUSTOMER_TYPE>" +
"<XX_FLD_DOY>DOY1</XX_FLD_DOY>" +
"<XX_FLD_OCCUPATION>IT</XX_FLD_OCCUPATION>" +
"</XX_FLD_CUSTOMER_PROFILE>" +
"<XX_FLD_DISCOUNT_PROFILE elem=\"0\">" +
"<XX_FLD_DISCOUNT_NO>123</XX_FLD_DISCOUNT_NO>" +
"</XX_FLD_DISCOUNT_PROFILE>" +
"<XX_FLD_EFFECTIVE_DATE>1293722022</XX_FLD_EFFECTIVE_DATE>" +
"<XX_FLD_INVOICE_PROFILE elem=\"0\">" +
"<XX_FLD_DIVERT_FLAG>1</XX_FLD_DIVERT_FLAG>" +
"<XX_FLD_INV_TYPE>1</XX_FLD_INV_TYPE>" +
"<XX_FLD_MAIL_FLAG>1</XX_FLD_MAIL_FLAG>" +
"</XX_FLD_INVOICE_PROFILE>" +
"<XX_FLD_MESSAGE_NO>mandatory</XX_FLD_MESSAGE_NO>" +
"<XX_FLD_OWN>1</XX_FLD_OWN>" +
"<XX_FLD_PARENT_FLAG>1</XX_FLD_PARENT_FLAG>" +
"<XX_FLD_PAYMENT_PROFILE elem=\"0\">" +
"<XX_FLD_BANK_ACCOUNT_NUM>optional</XX_FLD_BANK_ACCOUNT_NUM>" +
"<XX_FLD_BANK_NAME>optional</XX_FLD_BANK_NAME>" +
"<XX_FLD_CREDIT_CARD_NUM>optional</XX_FLD_CREDIT_CARD_NUM>" +
"<XX_FLD_CREDIT_CARD_TYPE>0</XX_FLD_CREDIT_CARD_TYPE>" +
"<XX_FLD_PAYMENT_METHOD>1</XX_FLD_PAYMENT_METHOD>" +
"</XX_FLD_PAYMENT_PROFILE>" +
"</flist>";

String result = service.getInfranet().opcode("61101", createBAFlist2);

System.out.println(result);


The result returned by WS is as follows:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<flist>
<ERROR_DESCR>Mandatory field of input flist is missing (field: XX_FLD_PAYMENT_METHOD)</ERROR_DESCR>
<ERROR_NUM>30001</ERROR_NUM>
<OP_CORRELATION_ID>1:ACCENTUR-F677C3J:UnknownProgramName:0:[ACTIVE] ExecuteThread: '19' for queue: 'weblogic.kernel.Default (self-tuning)':61101:1283353378:0</OP_CORRELATION_ID>
<POID>0.0.0.1 /error -1 0</POID>
<XX_FLD_ERROR_CLASS>30</XX_FLD_ERROR_CLASS>
<XX_FLD_OPCODE_END>2010-09-01 18:05:18.150</XX_FLD_OPCODE_END>
<XX_FLD_OPCODE_START>2010-09-01 18:05:18.146</XX_FLD_OPCODE_START>
<XX_FLD_OPCODE_TIME>4</XX_FLD_OPCODE_TIME>
</flist>


We get an error from the opcode that the mandatory field XX_FLD_PAYMENT_METHOD was not found within the input flist 'createBAFlist2'. This is an inner element of the <XX_FLD_PAYMENT_PROFILE elem=\"0\"> element. The error is a message returned from BRM.

Lets see what messages logs appears in cm log file:

' for queue: 'weblogic.kernel.Default (self-tuning)':61101:1283353378:0
      XXX CMAP: op_custom() past op_decode, opcode: 61101
D Thu Sep 16 03:22:42 2010 grxsz00c cm_client:1072 XX_op_ba_create.c(419):122 1:ACCENTUR-F677C3J:UnknownProgramName:0:[ACTIVE] ExecuteThre
ad: '19' for queue: 'weblogic.kernel.Default (self-tuning)':61101:1283353378:0
      XX_op_ba_create: Input flist
# number of field entries allocated 20, used 12
0 PIN_FLD_POID POID [0] 0.0.0.1 /account 491643 0
0 XX_FLD_PAYMENT_PROFILE ARRAY [0] NULL array ptr
0 XX_FLD_OWN INT [0] 1
0 XX_FLD_EFFECTIVE_DATE TSTAMP [0] (1293722022) Thu Dec 30 17:13:42 2010
0 XX_FLD_BILLING_DAY INT [0] 1
0 XX_FLD_PARENT_FLAG INT [0] 1
0 XX_FLD_ACCOUNT_NO STR [0] "APAN-TEST-XSD1"
0 XX_FLD_DISCOUNT_PROFILE ARRAY [0] NULL array ptr
0 XX_FLD_MESSAGE_NO STR [0] "mandatory"
0 XX_FLD_CUSTOMER_PROFILE ARRAY [0] NULL array ptr
0 XX_FLD_INVOICE_PROFILE ARRAY [0] NULL array ptr
0 XX_FLD_ADDRESS ARRAY [0] NULL array ptr
E Thu Sep 16 03:22:42 2010 grxsz00c cm_client:1072 pin_flist(53):2704 1:ACCENTUR-F677C3J:UnknownProgramName:0:[ACTIVE] ExecuteThread: '19'
for queue: 'weblogic.kernel.Default (self-tuning)':61101:1283353378:0
      Bad flist ptr in pini_flist_get
E Thu Sep 16 03:22:42 2010 grxsz00c cm_client:1072 XX_op_ba_create.c(419):420 1:ACCENTUR-F677C3J:UnknownProgramName:0:[ACTIVE] ExecuteThre
ad: '19' for queue: 'weblogic.kernel.Default (self-tuning)':61101:1283353378:0
      fm_XX_ba_create: Couldn't get mandatory field XX_FLD_PAYMENT_METHOD of payment_profile_flistp
      <location=PIN_ERRLOC_FLIST:6 class=PIN_ERRCLASS_SYSTEM_DETERMINATE:1 errno=PIN_ERR_BAD_ARG:4>
      <field num=XX_FLD_PAYMENT_METHOD:1,20134 recid=0 reserved=0 reserved2=0 time(sec:usec)=0:0>
      <facility=0 msg_id=0 version=0>
D Thu Sep 16 03:22:42 2010 grxsz00c cm_client:1072 XX_op_ba_create.c(419):154 1:xx-F677C3J:UnknownProgramName:0:[ACTIVE] ExecuteThre
ad: '19' for queue: 'weblogic.kernel.Default (self-tuning)':61101:1283353378:0
      XX_op_ba_create: Output flist:
# number of field entries allocated 20, used 7
0 PIN_FLD_POID POID [0] 0.0.0.1 /error -1 0
0 PIN_FLD_ERROR_NUM INT [0] 30001
0 XX_FLD_ERROR_CLASS INT [0] 30
0 PIN_FLD_ERROR_DESCR STR [0] "Mandatory field of input flist is missing (field: XX_FLD_PAYMENT_METHOD)"
0 XX_FLD_OPCODE_START STR [0] "2010-09-01 18:05:18.146"
0 XX_FLD_OPCODE_END STR [0] "2010-09-01 18:05:18.150"
0 XX_FLD_OPCODE_TIME INT [0] 4


We can see that the input flist that was passed to BRM contains incomplete data. There are some fields that were placed on our xml input flist is now missing, and the fields were nested within the arrays fields.

E.g.:

"<XX_FLD_PAYMENT_PROFILE elem=\"0\">" +
"<XX_FLD_BANK_ACCOUNT_NUM>optional</XX_FLD_BANK_ACCOUNT_NUM>" +
"<XX_FLD_BANK_NAME>optional</XX_FLD_BANK_NAME>" +
"<XX_FLD_CREDIT_CARD_NUM>optional</XX_FLD_CREDIT_CARD_NUM>" +
"<XX_FLD_CREDIT_CARD_TYPE>0</XX_FLD_CREDIT_CARD_TYPE>" +
"<XX_FLD_PAYMENT_METHOD>1</XX_FLD_PAYMENT_METHOD>" +
"</XX_FLD_PAYMENT_PROFILE>" +


has been passed as:

0 XX_FLD_PAYMENT_PROFILE ARRAY [0] NULL array ptr


The WSM does not pass all of the fields to CM. More precisely, the fields that are nested within the arrays are missing.

Cause

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms