How to do XML-Split and Keep Parent Element? - spring-integration

I know Spring Integration is rather old but I have a piece of code that needs small modification to move on. I need to split the incoming XML message and preserve the parent node. Here is my XML:
<Order>
<Item>A</Item>
<Item>B</Item>
</Order>
And I want to split into 2 XMLs and preserve the XSD validation.
<Order>
<Item>A</Item>
</Order>
and
<Order>
<Item>B</Item>
</Order>
Did this:
<beans xmlns:int-xml="http://www.springframework.org/schema/integration/xml">
...
<int-xml:xpath-splitter id="splitter">
<int-xml:xpath-expression expression="/Order/Item"/>
</int-xml:xpath-splitter>
...
It split into
<Item>A</Item>
and
<Item>B</Item>
but I need the parent to be there. Anyway to make it works? Thanks in Advance.

What you need is an <int-xml:xslt-transformer> after your <int-xml:xpath-splitter>.
See Reference Manual for more info: https://docs.spring.io/spring-integration/docs/5.2.0.RELEASE/reference/html/xml.html#xml-xslt-payload-transformers
You need to learn what is XSLT and so on.

I know Spring Integration is rather old
??
It is actively maintained and enhanced; there was a completely new release this month.
You either need a custom splitter, or you can add a transformer after the splitter to add the outer node.

Related

XML from Excel with multiple times placed elements but different attributes

I'd like to create XML file from Excel sheet. But in my XML file there is multiple placement of same element, but always with different atributes (like element variable and atribute is that variable name).
<?xml version="1.0" encoding="utf-8"?>
<Configuration typical="Configurator1">
<TypicalInstance name="Typical1">
<Instance>
<ConfigurationVariables>
<ConfigurationVariable name="typical1Variable1">T1Value1</ConfigurationVariable>
<ConfigurationVariable name="typical1Variable2">T1Value2</ConfigurationVariable>
</ConfigurationVariables>
</Instance>
<Instance>
<ConfigurationVariables>
<ConfigurationVariable name="typical1Variable1">T1Value11</ConfigurationVariable>
<ConfigurationVariable name="typical1Variable2">T1Value12</ConfigurationVariable>
</ConfigurationVariables>
</Instance>
</TypicalInstance>
</Configuration>
So I have two properties named typical1Variable1 and 2. So I need two separated columns for filling data in. Each row should be done like another Instance element.
Is this even possible with native XML mapping?
Thanks for answers.

How to set SVG file to image view in Android Xamarin?

I am using the below code to set the svg file as image view source.
imageView.SetImageDrawable(Resources.System.GetDrawable(Resource.Drawable.Typogy1));
it throws an exception. Please suggest me how to set the svg file to image view.
This example by James Mundy is really good for SVG usage in xamarin android.
But recently in a chat with him, he said and as well as, in my opinion, the best way of using SVG's in an Android application is using Vector Drawables. (Much better than using any libraries)
Vector drawable's are easy to use, maintain and are very lightweight in comparison to images which makes them even better.
An example of how to use it.
Creating SVG vector drawable's is very easy too, using this
Update:
Vector.xml
<?xml version="1.0" encoding="utf-8" ?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="96dp"
android:width="96dp"
android:viewportHeight="48"
android:viewportWidth="48" >
<group>
<path
android:fillColor="#393939"
android:pathData="M12 36l17-12-17-12v24zm20-24v24h4V12h-4z" />
</group>
</vector>
Place this XML in a folder inside your Resources for eg your drawable folder or your layout folder, then use it as follows :
_yourImageView.SetImageResource(Resource.Drawable.Vector);
Goodluck!
Revert in case of any queries.

How to unescape a CDATA section using JAXB in a dynamic way

I'm trying to make a section of my SOAP request look like this:
<![CDATA[<?xml version="1.0" encoding="UTF-8"?><placeholder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="WirelessEdgeInfo_v1_0.xsd"/>]]>
However, it looks like this after it has been escaped by underlying JAXB:
<![CDATA[<?xml version="1.0"
encoding="UTF-8"?> <placeholder
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="WirelessEdgeInfo_v1_0.xsd"/>]]&gt
I have looked at numerous examples, such as using MOXy and also implementing a CharacterEscapeHandler adapter or XmlAdapter HOWEVER the problem is the same for ALL these implementations. That is, it always comes down to this:
marshaller.setProperty(CharacterEscapeHandler.class.getName(),
new XmlCharacterHandler());
Setting a property in the marshaller.
However, in my case, I am using annotations generated through WSImport to generate my Web Services code dynamically when I execute the client SOAP call.
i.e. I do not have access to the marshaller object.
SO for me, how can I unescape the CDATA section of a String variable I need to pass in if I cannot set any property on the marshaller type?
Can I somehow "hack" or trick JAXB to tell it not to escape CDATA values? Or can I use annotations or somehow dynamically indicate unescaping?
I tried the following Adapter via annotation but of course this did not work:
#XmlJavaTypeAdapter(value=CDATAAdapter.class) //this is not working right now
protected String variableXmlContent;
variableXmlContent still ended up escaped. I also tried unescaping variableXmlContent and setting it as an input value, but it still came out the same way, unescaped.
An XML element value containing <, >, & is escaped by the marshaller using <, >, &.
Thus, if the XML element should contain
<![CDATA[ ... ]]>
the result in the XML file will be
<![CDATA[ ... ]]>
I suspect that the text to be passed as an XML element is
<?xml version="1.0" ... v1_0.xsd"/>
Now if I had to write this by hand into an XML file, I'd write it into a "CDATA section", but a (JAXB) marshaller will simply treat those three characters as I described before, and that's it.
<?xml version="1.0" ... v1_0.xsd"/>
It is pointless to try and make any XML marshaller use the CDATA mechanism, and there is no such thing as a "CDATA value" requiring special treatment - so there is no such special treatment.

When did <?xml> layout tag become unnecessary?

I see that Android Studio creates all XML layout files without the starting
<?xml version="1.0" encoding="utf-8"?>
When did this become unnecessary? I remember that previously it would have generated compile-time error.
If it did not become unnecessary, but the compiler simply ignores it, is it a good practice not to use it?

HELP ME my dataset xsd content HAS GONE

I'm working in an erp project using Visual Studio 2008 Sp1, I've a typed dataset it was containg alot of datatable and alot of table adapter the .Designer.cs file was 8 MB, suddenly when i was trying to openit using visual studio designer the following code comes to me
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="erpDataSet" targetNamespace="http://tempuri.org/erpDataSet1.xsd" xmlns:mstns="http://tempuri.org/erpDataSet1.xsd" xmlns="http://tempuri.org/erpDataSet1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:annotation>
<xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">
<DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<Connections>
<Connection AppSettingsObjectName="Settings" AppSettingsPropertyName="erpConnectionString" IsAppSettingsProperty="true" Modifier="Assembly" Name="erpConnectionString (Settings)" ParameterPrefix="#" PropertyReference="ApplicationSettings.Sbic.Pro
My XSD file content has gone, :( :( :(
I don't understand why, and how can i recover it.
i mad something but i don't know if it is the reason for that or not, My connectionstring was in the settings "app.config" i removed it and add it to the resources of another project that is refernced by the main project.
what can i do, pleaze help me.
If I understand your problem, you were adding code to the ".Designer.cs". That file is an auto-generated file. Every time you re-save the XSD file, the designer.cs file will be regenerated. You should never add content to a designer.cs file. If you need to add functionality to the dataset, you can extend the dataset by making a "partial" class in a different file using the same namespace that you find in the generated file.

Resources