XML validation in WS adapter
Hi experts,
I get the following error message in SXMB_MONI while processing a message through a WS sender adapter:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Error Message -->
<n0:Fault xmlns:n0="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>n0:Server</faultcode>
<faultstring xml:lang="en">SRT: Failure in SOAP processing occurred</faultstring>
<detail>
<ns:SystemFault xmlns:ns="http://www.sap.com/webas/710/soap/runtime/abap/fault/system/">
<Host>Integration Server Entry</Host>
<Component>COREMSG</Component>
<ChainedException>
<Exception_Name>CX_XMS_XI_SYS_ERR</Exception_Name>
<Exception_Text>System error</Exception_Text>
</ChainedException>
<ChainedException>
<Exception_Name>CX_XMS_SYSERR_VALIDATION</Exception_Name>
<Exception_Text>System error occurred during XML validation</Exception_Text>
</ChainedException>
</ns:SystemFault>
</detail>
</n0:Fault>
This is strange, because I didn't configure any XML validation. I didn't configure that explicitly.
However, I noticed that the step "XML Validation Inbound Channel Request ( CENTRAL )" is executed every time I send messages to PI. Normally this is successful, so the message flow is not interrupted. But even in the successful case the xml header is always cut off (so the line "<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>" in the beginning). I checked other messages with different adapters, and this step is never executed.
I would like to know whether this step can be switched off somewhere or whether it is performed by default. Does anybody know more about this topic?
Best regards,
Jörg
Hi Hema,
As per understanding you need to check one or few fields value is integer or not.
You can achieve in 2 ways :
Case1:Using inbuilt xml validation options.
For 7.11 and below
1)In ESR/Message type/Export the xsd to local machine.
2)Insert the xsd file in the below loc
/usr/sap/<sid>/DVEBMGS00/j2ee/cluster/server0/validation/schema/
<guid>/<namespace1>/<service_interface_name>/<namespace2>
<sid>: System ID of the server instance.
<guid>: The GUID of the SWCV.
<namespace1> : The namespace within which the service interface is defined.
<service_interface_name> : The name of the service interface.
<namespace2>
: The namespace of the Message Type used by the service interface. In many
instances, namespace1 and namespace2 are the same.
Italic path folders need to create by you.
For 7.3 and above
Michal's PI tips: XML validation - changes in 7.3
Case 2 :Handling using simple UDF.
Input-->UDF-->Output
try {
Integer.parseInt(input);
return input ;
catch(NumberFormatException e) {
throw new StreamTransformationException( "Input field value for xyz field "+input+"is not in integer format.Plz correct it");
Regards
Venkat
Similar Messages
-
Incoming XML validation for SOAP adapter request
Hi,
Does anyone know of a method to validate incoming XML request against the relevant XSD definition and return a SOAP fault message to the calling application ?
I guess this would involve BPM unless there is some sort of module that can be used.
Please advise.
Kind regards
Colin.Hi Michal,
Would you suggest a simple BPM or an adapter module ?
I would hope a simple BPM would be the way it could be done.
Cheers
Colin. -
XML validation in sender file adapter
Hi
I am using FCC on the sender file adapter ....i need to make sure that one of the fields should always be integer else the sender adapter should give error
Can i use xml validation with FCC on the sender file adapter?Hi Hema,
As per understanding you need to check one or few fields value is integer or not.
You can achieve in 2 ways :
Case1:Using inbuilt xml validation options.
For 7.11 and below
1)In ESR/Message type/Export the xsd to local machine.
2)Insert the xsd file in the below loc
/usr/sap/<sid>/DVEBMGS00/j2ee/cluster/server0/validation/schema/
<guid>/<namespace1>/<service_interface_name>/<namespace2>
<sid>: System ID of the server instance.
<guid>: The GUID of the SWCV.
<namespace1> : The namespace within which the service interface is defined.
<service_interface_name> : The name of the service interface.
<namespace2>
: The namespace of the Message Type used by the service interface. In many
instances, namespace1 and namespace2 are the same.
Italic path folders need to create by you.
For 7.3 and above
Michal's PI tips: XML validation - changes in 7.3
Case 2 :Handling using simple UDF.
Input-->UDF-->Output
try {
Integer.parseInt(input);
return input ;
catch(NumberFormatException e) {
throw new StreamTransformationException( "Input field value for xyz field "+input+"is not in integer format.Plz correct it");
Regards
Venkat -
XML Validation - How to raise an alert
Hi PI Experts,
I enabled XML validation at "Validtion by Adapetr Engine". Its working fine. But how to integrate XML validation error with Alert Monitoring. Please advise.
Here below the error from Audit log:
2010-03-18 18:33:13 Information The application tries to send an XI message asynchronously using connection File_http://sap.com/xi/XI/System.
2010-03-18 18:33:13 Information Backward validation is enabled
2010-03-18 18:33:13 Error Unable to validate the message with message ID b01d356e-1801-4b93-29fb-9ed84b25c6a3
2010-03-18 18:33:13 Error Returning to application. Exception: com.sap.engine.interfaces.messaging.api.exception.MessageFormatException: cvc-enumeration-valid: Value '11' is not facet-valid with respect to enumeration '[1, 2, 3, 4, 5, 6, 7]'. It must be a value from the enumeration. at line 15, column 34
2010-03-18 18:33:13 Error MP: exception caught with cause com.sap.engine.interfaces.messaging.api.exception.MessageFormatException: cvc-enumeration-valid: Value '11' is not facet-valid with respect to enumeration '[1, 2, 3, 4, 5, 6, 7]'. It must be a value from the enumeration. at line 15, column 34
2010-03-18 18:33:13 Error File processing failed with com.sap.engine.interfaces.messaging.api.exception.MessageFormatException: cvc-enumeration-valid: Value '11' is not facet-valid with respect to enumeration '[1, 2, 3, 4, 5, 6, 7]'. It must be a value from the enumeration. at line 15, column 34
Thanks...
Ravi KanakamHi Ravi,
Are you getting other adapter engine alerts? Or only you are not getting xml validation ones? Also take a look at this:
/people/michal.krawczyk2/blog/2005/09/09/xi-alerts--troubleshooting-guide
Regards,
---Satish -
Xml validation in File to RFC Sync Scenario with Validation fails message
Hi All,
We are using PI 7.4 (Dual Stack) the Requirement is File to RFC Sync Scenario(File <---> RFC).and need to do XML validation against XSD Schema. if any Validations fails Response message should send back to sender.RequestResponseBean standard module is using for File to RFC Sync scenario but how to send the response message to sender if any validation fails. adapter level XML validation is not helpful for this requirement. please help out me how to achieve the requirement with graphical mapping.
Thanks in advance.to validate schema you cannot solve it with graphical mapping but validating the schema in the AAE or the integration engine.
y recomend you to use the AAE validation at sender side, coz the sender system will be notified in case of schema errors.
The response will be validated at Integration Server level.
you can search in the forum, you will get many document about how to configure it.
take a look to my blog: PI 7.3 - XML Validation -
Xml validation ---- file system of PI ???
hi all ,
i read the xml validation concept of PI7.1 . iam unable to find any practical explanation about the following
"To validate the structure of a PI message payload, you should export the schemas from the ESR and save them in the file system of PI. "
save them in the file system of pi ... where does this mean to be stored ?.
will it be necessary for both the ADAPTER ENGINE & INTEG ENGINE VALIDATION?
Please give any other important aspect of this validation concept which u came across during ur practical implementation
THANKS IN ADVANCEHi Netaji,
Validating the XML documents is a new feature introduced in SAP NetWeaver Process Integration 7.1. The validation can be performed at two different locations - Integration Server or the Adapter Engine. Validations can be done in both synchronous and asynchronous operations.
In the synchronous scenario or using an adapter that can handle synchronous messages (e.g. HTTP and SOAP adapters), when a validation error occurs, the error message will be returned to the sender. In the case of asynchronous scenarios (e.g. file adapter), the error message will be logged to the SXI_MONITOR when the validation is done in the Integration Server or to the Runtime Workbench (RWB) when the validation is done in the Adapter Engine. In both cases, the messaging will be terminated with error.
Both Integration Server and Adapter Engine can be used for validating XML from the sender. However, only the Integration Server can be used to validate the XML when sending to the receiver. The XML validation configurations are done in either the Sender Agreement or the Receiver Agreement.
In the current release, as of PI 7.1, the XML schema (or XSD) to be used for the XML validation has to reside in a file directory under the JEE. The XSD file has to be explicitly copied into a specific directory, depending on where the validation is to be performed.
Regards,
Leela -
Regarding error in xml validation 7.1
Hi
I am doing file to idoc scenario. In the sender agreement i selected validation by Adapter and uploaded the particular xsd.after executing the scenario in runtime workbench it is showing sucessfully processed but in the MDT audit log I am getting following error.without validation the file is posting in target system.but when I check the validation by adapter it is giving following error.
Received XI System Error. ErrorCode: CX_XMS_SYSERR_VALIDATION ErrorText: not used at the moment. ErrorStack: System error occurred during XML validation
Transmitting the message to endpoint http://orcdapp1.edfapps.edfenergy.net:51100/sap/xi/engine?type=entry using connection File_http://sap.com/xi/XI/System failed, due to: com.sap.engine.interfaces.messaging.api.exception.MessagingException: CX_XMS_SYSERR_VALIDATION:not used at the moment..
Please give me your inputs.
Regards
venkat.Hi Venky,
This error due to incorrect path So please check whether you have used the correct path or not?
Create appropriate directories structure where we have to save your structure (xsd).
\usr\sap\<system id>\SYS\global\xi\runtime_server\A\B\C\D\E\F
A - validation
B - schema
C - GUID of the SWCV where service interface reside.
D - Repository Namespace where Service Interface is created.
E - Service Interface Name
F - Repository Namespace where Message Type or External Definition is assigned.
Note: if your ESR namespace contains special character then do replace it with u201C~u201D in folder name.
If namespace is http://abc.com/XI/FileToFile then folder name should be replace with httpabc.comXI~FileToFile
Export schema from the ESR and save it in folder u201CFu201D with name <<RootElementOfMessageType>>.xsd. So in this case it is MT_File_Sender.xsd
Regards,
Sameer
Edited by: sameer Khanna on May 27, 2009 10:14 AM -
XML Validation with multiple XSD files (referenced)
Hello,
I know that XML validation with version 7.1 is possible now. However I was provided with a set of XSD files that have references to each other and need to be placed in a hierachical file system order so that references can be resolved.
An element <xsl:include schemaLocation="../../baseSchemas/baseSchema.xsd" /> is used for example. How can I handle that for XSD validation in PI? Can I create the same folder structure or do I need to put all XSD files in one directory and change the import manually?
But most important question: Is it possible it all to use more than one XSD for schema validation?Dear Florian,
I had encountered such case in a project.
I was given 3 files. One main file and 2 others called Schema1.xsd and Schema2.xsd.
This happens because your data type is not in single namespace, but is being referred across namespaces and software components.
I am assuming that you have read the How to Guide for XML validations on PI 7.1
Best way to do this quickly is as follows.
1. Enable XML validation at adapter engine in the sender agreement.
2. Post a message using HTTP post. (http://sappihttpclient.codeplex.com)
3. Check communication channel in runtime workbench. There will be an error saying which is missing at what path.
4. Create the path mentioned and place the file at that path.
5. Repeat steps 2,3,4 for all the files.
When you are done with this, you will get a proper validation error in case XML file is not correct. And remember to generate XSD from message type and not data type.
Regards,
Vikas
Edited by: Vikas Aggarwal on Sep 2, 2009 8:45 PM
Edited by: Vikas Aggarwal on Sep 2, 2009 8:48 PM -
XML Validation on HTTP Adaptor
Hi,
We are implementing a HTTP sender channel on PI 7.11 and requires XML validation to be performed upon receiving. The validation is required to check if all the tags are closed and ended properly. Failing to do so, an error XML will be generated and subsequently send back to the sender.
There is a blog /people/william.li/blog/2009/03/19/adapter-user-module-for-http-adapter detailing the development of user module for HTTP channel but we remain clueless on how can we change it to suit our needs. The XML messages can be of different format (different XSD) thus we need to make this as generic as possible.
Ultimately the intention is to prevent XML to fail at later stage within PI and stopped the communication. Hope any experts out there can point us to the right direction.
Thanks in advance!
Regards,
Wai XinUse SOAP sender channel and do it with java.
Chcek the possibility of creating fault message with custom validation code in java
check this thread stefans reply on same thing .it will give you a direction how to proceed with it.Hope it helps you
How to send the SOAP Fault Message to the Web Service Consumer
Also see
XML Validation using JAVA -
Not able to run validation using validation.xml & validator-rules.xml
Hello Friends,
I am not able to run validation using validation.xml & validator-rules.xml.
Entire code in running prefectly but no error messages are prompted.
Following is my code:
File Name : struts-config.xml
<struts-config>
<!-- Form Beans Configuration -->
<form-beans>
<form-bean name="searchForm"
type="com.solversa.SearchForm"/>
</form-beans>
<!-- Global Forwards Configuration -->
<global-forwards>
<forward name="search" path="/search.jsp"/>
</global-forwards>
<!-- Action Mappings Configuration -->
<action-mappings>
<action path="/search"
type="com.solversa.SearchAction"
name="searchForm"
scope="request"
validate="true"
input="/search.jsp">
</action>
</action-mappings>
<!-- Message Resources Configuration -->
<message-resources
parameter="ApplicationResources"/>
<!-- Validator Configuration -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
<br> File Name : <b> validation.xml </b>
<form-validation>
<formset>
<form name="searchForm">
<field property="name" depends="minlength">
<arg key="label.search.name" position = "0"/>
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
</field>
<field property="ssNum" depends="mask">
<arg0 key="label.search.ssNum"/>
<var>
<var-name>mask</var-name>
<var-value>^\d{3}-\d{2}-\d{4}$</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
<br> File Name : <b> SearchForm.java </b>
package com.jamesholmes.minihr;
import java.util.List;
import org.apache.struts.validator.ValidatorForm;
public class SearchForm extends ValidatorForm
private String name = null;
private String ssNum = null;
private List results = null;
public void setName(String name) {
this.name = name;
public String getName() {
return name;
public void setSsNum(String ssNum) {
this.ssNum = ssNum;
public String getSsNum() {
return ssNum;
public void setResults(List results) {
this.results = results;
public List getResults() {
return results;
<br> File Name : <b> SearchAction.java </b>
package com.jamesholmes.minihr;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public final class SearchAction extends Action
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
EmployeeSearchService service = new EmployeeSearchService();
ArrayList results;
SearchForm searchForm = (SearchForm) form;
// Perform employee search based on what criteria was entered.
String name = searchForm.getName();
if (name != null && name.trim().length() > 0) {
results = service.searchByName(name);
} else {
results = service.searchBySsNum(searchForm.getSsNum().trim());
// Place search results in SearchForm for access by JSP.
searchForm.setResults(results);
// Forward control to this Action's input page.
return mapping.getInputForward();
<br> File Name : <b> EmployeeSearchService.java </b>
package com.jamesholmes.minihr;
import java.util.ArrayList;
public class EmployeeSearchService
/* Hard-coded sample data. Normally this would come from a real data
source such as a database. */
private static Employee[] employees =
new Employee("Bob Davidson", "123-45-6789"),
new Employee("Mary Williams", "987-65-4321"),
new Employee("Jim Smith", "111-11-1111"),
new Employee("Beverly Harris", "222-22-2222"),
new Employee("Thomas Frank", "333-33-3333"),
new Employee("Jim Davidson", "444-44-4444")
// Search for employees by name.
public ArrayList searchByName(String name) {
ArrayList resultList = new ArrayList();
for (int i = 0; i < employees.length; i++) {
if (employees.getName().toUpperCase().indexOf(name.toUpperCase()) != -1) {
resultList.add(employees[i]);
return resultList;
// Search for employee by social security number.
public ArrayList searchBySsNum(String ssNum) {
ArrayList resultList = new ArrayList();
for (int i = 0; i < employees.length; i++) {
if (employees[i].getSsNum().equals(ssNum)) {
resultList.add(employees[i]);
return resultList;
<br> File Name : <b> Employee.java </b>
package com.solversa;
public class Employee
private String name;
private String ssNum;
public Employee(String name, String ssNum) {
this.name = name;
this.ssNum = ssNum;
public void setName(String name) {
this.name = name;
public String getName() {
return name;
public void setSsNum(String ssNum) {
this.ssNum = ssNum;
public String getSsNum() {
return ssNum;
Pls help me out.
Not able to prompt errors.Hello Friends,
I am not able to run validation using
validation.xml & validator-rules.xml.
Entire code in running prefectly but no error
messages are prompted.
Following is my code:
File Name : struts-config.xml
<struts-config>
<!-- Form Beans Configuration -->
<form-beans>
<form-bean name="searchForm"
type="com.solversa.SearchForm"/>
ans>
<!-- Global Forwards Configuration -->
<global-forwards>
<forward name="search" path="/search.jsp"/>
global-forwards>
<!-- Action Mappings Configuration -->
<action-mappings>
<action path="/search"
type="com.solversa.SearchAction"
name="searchForm"
scope="request"
validate="true"
input="/search.jsp">
tion>
</action-mappings>
<!-- Message Resources Configuration -->
<message-resources
parameter="ApplicationResources"/>
<!-- Validator Configuration -->
<plug-in
className="org.apache.struts.validator.ValidatorPlugI
">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
>
</struts-config>
<br> File Name : <b> validation.xml </b>
<form-validation>
<formset>
<form name="searchForm">
<field property="name" depends="minlength">
<arg key="label.search.name" position = "0"/>
<arg1 name="minlength" key="${var:minlength}"
resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
</field>
<field property="ssNum" depends="mask">
<arg0 key="label.search.ssNum"/>
<var>
<var-name>mask</var-name>
<var-value>^\d{3}-\d{2}-\d{4}$</var-value>
</var>
</field>
/form>
</formset>
form-validation>
<br> File Name : <b> SearchForm.java </b>
package com.jamesholmes.minihr;
import java.util.List;
import org.apache.struts.validator.ValidatorForm;
public class SearchForm extends ValidatorForm
private String name = null;
private String ssNum = null;
private List results = null;
public void setName(String name) {
this.name = name;
public String getName() {
return name;
public void setSsNum(String ssNum) {
this.ssNum = ssNum;
public String getSsNum() {
return ssNum;
public void setResults(List results) {
this.results = results;
public List getResults() {
return results;
<br> File Name : <b> SearchAction.java </b>
package com.jamesholmes.minihr;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public final class SearchAction extends Action
public ActionForward execute(ActionMapping
mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
EmployeeSearchService service = new
EmployeeSearchService();
ArrayList results;
SearchForm searchForm = (SearchForm) form;
// Perform employee search based on what criteria
was entered.
String name = searchForm.getName();
if (name != null && name.trim().length() > 0) {
results = service.searchByName(name);
else {
results =
service.searchBySsNum(searchForm.getSsNum().trim());
// Place search results in SearchForm for access
by JSP.
searchForm.setResults(results);
// Forward control to this Action's input page.
return mapping.getInputForward();
<br> File Name : <b> EmployeeSearchService.java </b>
package com.jamesholmes.minihr;
import java.util.ArrayList;
public class EmployeeSearchService
/* Hard-coded sample data. Normally this would come
from a real data
source such as a database. */
ivate static Employee[] employees =
new Employee("Bob Davidson", "123-45-6789"),
new Employee("Mary Williams", "987-65-4321"),
new Employee("Jim Smith", "111-11-1111"),
new Employee("Beverly Harris", "222-22-2222"),
new Employee("Thomas Frank", "333-33-3333"),
new Employee("Jim Davidson", "444-44-4444")
// Search for employees by name.
public ArrayList searchByName(String name) {
ArrayList resultList = new ArrayList();
for (int i = 0; i < employees.length; i++) {
if
(employees.getName().toUpperCase().indexOf(name.toU
pperCase()) != -1) {
resultList.add(employees[i]);
return resultList;
// Search for employee by social security number.
public ArrayList searchBySsNum(String ssNum) {
ArrayList resultList = new ArrayList();
for (int i = 0; i < employees.length; i++) {
if (employees[i].getSsNum().equals(ssNum)) {
resultList.add(employees[i]);
return resultList;
<br> File Name : <b> Employee.java </b>
package com.solversa;
public class Employee
private String name;
private String ssNum;
public Employee(String name, String ssNum) {
this.name = name;
this.ssNum = ssNum;
public void setName(String name) {
this.name = name;
public String getName() {
return name;
public void setSsNum(String ssNum) {
this.ssNum = ssNum;
public String getSsNum() {
return ssNum;
Pls help me out.
Not able to prompt errors.
Hi,
Your error message are not displaying because u does not made Message-Resoucrce property file (Resource Bundle) when you make it .
give it entry in
struts-config.xml
<message-resources parameter="ApplicationResources" />
and
define key and corresponding error message to key in this ApplicationResources i.e
#Error Resources
label.search.ssNum=Plz Enter correct ssNum -
XML validation error while parsing MXI Manifest
Hi,
I have created an hybrid extension for Photoshop. I want to upload my extension on Adobe Exchange. during the upload process I get an error,
"XML validation error while parsing MXI Manifest: Declarations can only occur in the doctype declaration. Line: 19 Position: 791 Last 80 unconsumed characters".
The error description specifies that description in MXI file is not valid. Below are the contents of my MXI file.
<macromedia-extension
name="yyy"
id="com.yyy"
version="1.0.0"
type="object"
requires-restart="true">
<author name="abcd" />
<products>
<product familyname="Photoshop" maxversion="" primary="true" version="12.0"/>
</products>
<description>
<![CDATA[
<p><font size="14" color="black"><b>abcd</b> qwertyuioipafgjhkjljljklkjl
<br><br>
Open Extension via: Photoshop top menu > Window > Extensions > abcd.
<br><br>
Online support at: <a href="http://www.abcd.com/help.php">http://www.abcd.com/help.php</a></font></p>
<br>]]>
</description>
<ui-access>
</ui-access>
<license-agreement>
</license-agreement>
<files>
<file destination="$ExtensionSpecificEMStore/com.abcd/html/abcd.html" products="" source="zxp-support/Description/abcd.html"/>
<file destination="$ExtensionSpecificEMStore/com.abcd/html/abcd.png" products="" source="zxp-support/Description/abcd.png"/>
<file destination="" file-type="CSXS" products="" source="abcd.zxp"/>
<file destination="$automate" file-type="plugin" platform="mac" products="Photoshop" source="mac/abcd.plugin"/>
<file destination="$automate" file-type="plugin" platform="win" products="Photoshop32" source="win32/abcd.8li"/>
<file destination="$automate" file-type="plugin" platform="win" products="Photoshop64" source="win64/abcd.8li"/>
</files>
</macromedia-extension>
Can anyone please point out why am I getting the error?
ThanksHi CarlSun,
Thanks for the reply. I have made the changes suggested by you.
I have few queries:
1. Can we use attribute "source" in the description tag?
I have created a local html page and specified it in source attribute. but the Extension Manager CS6 did not render the local html page and displayed the following:
No description avaliable. Click the following link for more details.
"http://www.abcd.html". Is it possible to display a local html page in Extension Manager CS6?
2. Can I display an image (png) in CDATA under description tag? If yes, then can you please guide me how can I do so?
3. As suggested in tech notes MXI file must include UTF-8 encoding as header (<?xml version="1.0" encoding="UTF-8"?>). The MXI I am using does not have this header. Do I need to include the header?
Thanks -
XML Validation in PI 7.1 - Restart and skip validation possible, but how?
Hello all,
I read about schema validation in PI 7.1 and did a few tests on my own, but could not restart and skip validation for invalid payloaded messages. The documents say it is possible.
Anyone know how? Thanks.
BTW, I really think putting the schemas in server file system will cause a lot of authorization trouble in enterprises. No one gives access to the server filesystem and I don't think they will also like to open the required subdirectories for share. Asking the basis team to create the folder structures and maintaining schemas would be another pain. Don't you also think that SAP could find a better approach, like automatically uploading the schemas to the filesystem, or validating them from repository directly if possible?
Kind regards,
GökhanHi Gökhan,
I am facing the same issue.
I set up outbound xml validation in receiver agreement and tested it with valid and invalid messages.
The validation works fine.
But in case of validation error I tried to restart with skipping the validation. But this wasn't possible.
I am always facing the same valdiation error.
I already tried all different tools I know (sxi_monitor, message monitoring in rwb and in nwa)
I am working on PI 7.11 SP6
Did you find a solution for skipping the validation for a single message out of the monitoring?
I know that there is the possibility of deactivate the validation in receiver agreement but thid doesn't meet the requirement of skip the validation only for a single message.
Maybe anyone else faced and solved this issue already.
Thanks in advance
Jochen -
Flat file to XML in SAP SFTP adapter
Hello All
I am trying to convert flat file to xml using SAP SFTP adapter.
Flat File is like below:
AABEN;20141106;20141106;45;0.00
AABOL;20141106;20141106;45;0.00
ABGRI;20141106;20141106;45;0.00
ADDEA;20141106;20141106;45;0.00
ALADA;20141106;20141106;45;58.43
AMSCH;20141106;20141106;45;0.00
ANOLV;20141106;20141106;45;0.00
ANROY;20141106;20141106;45;0.00
AVMCD;20141106;20141106;45;0.00
Message Type structure I created like below
In Server SFTP adapter in Module tab I am using "AF_Modules/MessageTransformBean" and conversion type ="StructPlain2XML"
I am getting error = "Error: com.sap.aii.af.sdk.xi.adapter.trans.TransformException: Transformer Conversion3.0.5226 Error initializing Class: java.lang.Exception: java.lang.Exception: java.lang.Exception: Error(s) in XML conversion parameters found (4408) Parameter 'xml.keyFieldName' is missing (4403) Parameter 'xml.keyFieldType' is missing (4403) ; nested exception caused by: java.lang.Exception: java.lang.Exception: java.lang.Exception: Error(s) in XML conversion parameters found (4408) Parameter 'xml.keyFieldName' is missing (4403) Parameter 'xml.keyFieldType' is missing (4403) "
I am not using any key field then please let me know how to overcome this issue.
I searched on SDN but did not get any perfect answer.
Thanks
Dheeraj KumarHello Dheeraj,
Thanks for your reply. I created a new discussion,
Flatfile to XML
Thanks well in advance for your help!
-Satish. -
Dear Experts,
after I finally managed to configure the XML Validation, we're facing the next problem:
The payload of the XML files looks like that:
Abcdef#ABCDEF
AbcDef#123
<?xml version="1.0" encoding="UTF-8"?><Document xmlns.....
as you can see, there's a header which is necessary. The XML Validation works fine if the header is removed manually for testing. If the header is not removed, the validation is not possible ("Content is not allowed in prolog.")
Is it possible to realise the validation WITH that header? Can I tell SAP PI to ignore the header? Or make any changes to the XSD file?
Thanks alot!Hi Armin,
Armin Kern wrote:
> After leaving SAP PI, those 2 lines have to be in that exact place (before the XML part) for further processing. Just deleting it wouldn't be enought. Does the complex design you mentioned complay with this requirement?
You can put it into the message instead of deleting. And rebuild the "header" in the second step. So you can fullfill the requirement. As mentioned before: The design is complex, this will lead later on to problems. Any change will be difficult, as another developer had to read a long documentation.
An alternative would be to do all with one interface mapping (without validation):
1. ABAP / Java mapping deleting the "header" (put it to memory)
2. Messges Mapping 1:1 each field (will fail in case of wrong format and act as validator)
3. ABAP / Java mapping restoring the header
4. Alert will be raised in case of an error (to get the result of the validation)
Armin Kern wrote:
> I also thought about splitting the message, deleting those 2 rows in one of the messages, sending this one message to PI again, validate it and if it is correct, send the second message (without mapping) to the final destination. No idea if that is possible at all..
As well possible. You would need a virtual receiver for the first message, which is sending back a response. For example a servlett, a proxy or a RFC module. In that design you put some logic to the sender, what is actually not bad. But if you do so, why you dont validate there as well (for example with Java)? It would make your design much easier..
Regards,
Udo -
Since there is no XML validation currently in the Flex/Flash framework, I've decided to start a class that parses a string in an effort to validate the markup, returning whether the XML is valid. I have a need for it in my non-server based application, and have read in numerous places where there is desire for it as well. I have built the class far enough to get the ball rollin', but figure it should be :
A) available to the community
B) able to be improved upon by the community
If you improve upon the code, please post your work here so everyone can benefit.
Here is the source code :
XML Validator : v0.2 - last edit by Justin Myers | J2 CREATIVE MEDIA DESIGN
NOTES:
Parser is a bit weak and needs work.
Still need to :
- Make sure tags are ended properly
- Make sure there is space between tag name and attribute
Parser currently handles :
- Making sure there is no space between tags (with exception to white space)
- Making sure that attributes open and close properly
- Making sure there is proper space after an attribute or that it is immediately followed with the tag closing
package community.classes.parsers
public class XMLValidator
public function XMLValidator()
public static function validate(str:String , ignoreWhiteSpace:Boolean = true):Boolean
// validation defaults to true (innocent til proven guilty)
var valid:Boolean = true;
// minimum char length to be valid XML
if (str.length < 4)
valid = false;
var withinTag:Boolean;
var withinAttribute:Boolean;
var tags:Array = [];
var tag:String;
for (var i:uint = 0 ; i < str.length ; i++)
var char:String = str.charAt(i);
// if we are closing a tag
if (char == ">")
// invalid if we never opened a tag, or if we never closed the last attribute
if (!withinTag || withinAttribute)
valid = false;
break;
else
withinTag = false;
tags.push(tag);
// invalid if last character is not a closing tag
else if (i == str.length - 1)
valid = false;
break;
// if we are entering a tag
else if (char == "<")
// invalid if we haven't closed the last tag
if (withinTag)
valid = false;
break;
else
withinTag = true;
tag = "";
// all other characters
else
if ((char != " " || char != "\n") || ((char == " " || char == "\n") && !ignoreWhiteSpace) )
// invalid if there are any characters between tags
if (!withinTag)
valid = false;
break;
else
if (char == "\"")
// entering attribute
if (!withinAttribute)
// invalid if = does not preclude ", or there is space before =
if (str.charAt(i-1) != "=" || str.charAt(i-2) == " ")
valid = false;
break;
else
withinAttribute = true;
// exiting attribute
961190 wrote:
so whats the best way to store Rules?
How to get the data validated with those rules given the source data is in a xml file
The "integrity rules"?
Since they have to be ececutable code I'd suggest Java classes...
How to get the data validated with those rules given the source data is in a xml file
as @hsc71 wrote, that each XML element select the rules this particular element should pass and run each rule with the current element as parameter.
This meight be easiser in the Rules have a common interface like
interface Rule{
public boolean isPassedBy(XmlElement theCurrentElement, XmlElement theRootElement);
You could use the ServiceRegistry class from the JVM to fetch the known rules, so that you can add new ones with minimum effort.
bye
TPD
Maybe you are looking for
-
Reader in Mavericks not showing in Yosemite
In Mavericks, when I went to web sites, most of the time in the address bar on the right side, there was a blue box with the word "READER" in it. When i clicked on the word, the web page would change and only the article would appear. All the advert
-
Unable to find channel ID at inbound SOAP Adapter
Hi experts, I encountered a very puzzling problem: I have a scenario: IDOC -> XI -> SOAP For 2 interfaces of such nature, 1 works fine, 1 doesn't. The one that does not work is throwing the following error in RWB - Message Display Tool (MDT): 2007-03
-
Artist not showing in list of artists
I know the artist (Toto) is on my IPOD but it doesn't show in the list of artists. Why does it do this?
-
Qosmio G40-10Z: Question about energy use in sleepmode
When I turn my new Qosmio G40-10Z in sleeping mode, with full battery (and off the AC power), I can't start the computer next day. I can only start it up after connecting it to AC power. I get a message windows Vista wasn't closed properly and I am a
-
Solaris 10 on SATA disks?
Hi Guys, Need to install 10 on a Dell 850 but question is - can I go with SATA disks? The HCL listed 850 is installed using the onboard SCSI controllers... If anyone has successfully installed on SATA disks, please let me know!! Thanks in advance. To