本番環境で、どの環境でも再現できない奇妙な問題が発生しています。このエラーを生成するOrderProcess&Managementアプリケーションは、1日平均で数千の注文を処理します。4000注文。注文xmlは、さまざまなxsltを使用して変換され、注文ライフサイクルプロセスの各段階で注文データを更新します。ただし、1日に1回、xml変換の出力が失敗すると、Order Service&Managementアプリケーションの基盤となるAPIによって注文に対してOrderUpdateExceptionがスローされます。アプリケーションに組み込まれている注文フォールアウト管理により、ユーザーは最初に失敗した注文タスクを再試行または再送信できます。このタスクは、xalanを使用して注文xmlの変換を適用することにより、注文データを変更するステートレスセッションBeanを呼び出します。
そもそも失敗した理由はわかっていますが、何が原因で間違った変換が発生したのかはわかりません。
XMLの注文:
<GetOrder.Response xmlns="urn:com:metasolv:oms:xmlapi:1">
<OrderID>243193</OrderID>
<_root>
....
<Wireless>
...
....
<MDN>
<Action>NONE</Action>
....
...
<Services>
<Voice>
<ServiceName>VOICE</ServiceName>
<ServiceStatus>Initial</ServiceStatus>
<FulfillmentItems>
<FulfillmentItem index="1353944898394">
<FulfillmentItemCode>DCF1</FulfillmentItemCode>
<FulfillmentMessages/>
<Attributes/>
</FulfillmentItem>
<FulfillmentItem index="1353944898409">
<FulfillmentItemCode>HCFB</FulfillmentItemCode>
<FulfillmentItemCodeDescription>FC-VOICE</FulfillmentItemCodeDescription>
<FulfillmentMessages/>
<Attributes/>
</FulfillmentItem>
</FulfillmentItems>
</Voice>
</Services>
</MDN>
</Wireless>
</_root>
</GetOrder.Response>
XSL:
<xsl:template match="oms:Wireless">
<OrderDataUpdate xmlns="http://www.metasolv.com/OMS/OrderDataUpdate">
<xsl:apply-templates select="oms:MDN"/>
</OrderDataUpdate>
</xsl:template>
<xsl:template match="oms:MDN">
<xsl:call-template name="voice_template">
<xsl:with-param name="mdnId" select="$mdnId"/>
<xsl:with-param name="oldmdnId" select="$oldmdnId"/>
...
</xsl:call-template>
</xsl:call-template>
<xsl:template name="voice_template">
<xsl:param name="mdnId"/>
<xsl:param name="oldmdnId"/>
<xsl:param name="minId"/>
....
.....
<xsl:for-each select="oms:Services/oms:Voice/oms:FulfillmentItems/oms:FulfillmentItem">
<xsl:variable name="fulfillmentItem_index">
<xsl:value-of select="@index"/>
</xsl:variable>
<Add path="/Wireless/MDN/Services/Voice/FulfillmentItems/FulfillmentItem[@index='{$fulfillmentItem_index}']/Attributes">
----
----
</Add>
<xsl:for-each>
<xsl:template>
<xsl:template match="* | @* | text()">
<!-- do nothing -->
<xsl:apply-templates/>
</xsl:template>
変換された出力XML:
<?xml version="1.0" encoding="UTF-8"?>
<OrderDataUpdate xmlns="http://www.metasolv.com/OMS/OrderDataUpdate" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Add xmlns="" path="1353944898394']/Attributes">
<Attribute>
<name>HLR-MSISDN</name>
<value>2045731730</value>
</Attribute>
<Attribute>
<name>HLR-IMSI</name>
<value>302660397124421</value>
</Attribute>
<Attribute>
<name>HLR-NON_MTS_IMSI</name>
<value>302370397124421</value>
</Attribute>
</Add>
<Add xmlns="" path="/Wireless/MDN/Services/Voice/FulfillmentItems/FulfillmentItem[@index='1353944898409']/Attributes">
<Attribute>
<name>HLR-MSISDN</name>
<value>2045731730</value>
</Attribute>
....
<OrderDataUpdate>
forループの最初の反復中に、変数「fulfillmentItem_index」に間違った値が設定されていることがわかりました。連続した反復では、正しい値が設定されていました。その結果、アプリケーションはOrderUpdateExceptionをスローし、特定の注文の処理を停止します。ただし、同じタスクを再送信すると、最初から何も起こらなかったかのように注文プロセスが再開されます。
アプリケーションは、Weblogic Application Server9.2MP3で実行されます。また、環境チェックを実行しました。これがスローされたものです。
。私は環境チェックを実行しました、そしてこれはそれが投げたものです。
<checkEnvironmentExtension>
<EnvironmentCheck version="$Revision: 1.29 $">
<environment>
<item key="version.DOM.draftlevel">2.0fd</item>
<item key="java.class.path">:/home/weblogic/bea/patch_weblogic923/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/opt/java1.5/lib/tools.jar:/home/weblogic/bea/weblogic92/server/lib/Bug8841241_920mp1.jar:/home/weblogic/bea/weblogic92/server/lib/weblogic_sp.jar:/home/weblogic/bea/weblogic92/server/lib/weblogic.jar:/home/weblogic/bea/weblogic92/server/lib/webservices.jar::/home/weblogic/bea/weblogic92/common/eval/pointbase/lib/pbclient51.jar:/home/weblogic/bea/weblogic92/server/lib/xqrl.jar:/home/weblogic/AQJMSHOME/AQJMS/StartupClass/lib/WLS9.0/AQJMSStartupClass.jar:/home/weblogic/AQJMSHOME/jar_files/aqapi13.jar:</item>
<item key="version.JAXP">1.1 or higher</item>
<item key="java.ext.dirs">/opt/java1.5/jre/lib/ext</item>
<item key="version.xerces2">Xerces-J 2.8.1</item>
<item key="version.xerces1">Xerces 1.4.4</item>
<item key="version.xalan2_2">Xalan Java 2.7.0</item>
<item key="version.xalan1">not-present</item>
<item key="version.ant">Apache Ant version 1.6.2 compiled on August 5 2004</item>
<item key="java.version">1.5.0.17</item>
<item key="version.DOM">2.0</item>
<item key="version.crimson">not-present</item>
<item key="sun.boot.class.path">/opt/java1.5/jre/lib/rt.jar:/opt/java1.5/jre/lib/i18n.jar:/opt/java1.5/jre/lib/sunrsasign.jar:/opt/java1.5/jre/lib/jsse.jar:/opt/java1.5/jre/lib/jce.jar:/opt/java1.5/jre/lib/charsets.jar:/opt/java1.5/jre/classes</item>
<item key="version.SAX">2.0</item>
<item key="version.xalan2x">Xalan Java 2.7.0</item>
</environment>
<status result="OK"/>
</EnvironmentCheck>
</checkEnvironmentExtension>
誰かが私がこの奇妙な行動を説明するのを手伝ってくれるかどうか感謝します。これは毎日見られ、少なくとも1つまたは2つの注文が定期的に失敗しています。
前もって感謝します。