I am Using JAXB for unmarshalling process , for which the request comes from the UI to our service class . The below is the format of XML request .
<SampleRequest user="testUser" account="testAccount" Specifier= "value1a,value1b,value1c : name2a,value2b,value2c"/>
My requirement is that , the Specifier attribute has got Multiple series of values (: colon separated) i need to map each series of values to my custom java class
I tried this way
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleRequest {
@XmlAttribute
private String user;
@XmlAttribute
private String account;
@XmlAttribute(name="Specifier")
private List<Specifier> specifier;
}
Specifier.java
@XmlJavaTypeAdapter(SpecifierAdapter.class)
public class Specifier {
}
SpecifierAdapter.java
public class SpecifierAdapter extends XmlAdapter{
@Override
public Object marshal(Object arg0) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Object unmarshal(Object arg0) throws Exception {
// TODO Auto-generated method stub
return null;
}
}
Edited part
The class Specifier has got 3 String properties .
class Specifier
{
String value1;
String value2;
String value3;
}
And i need each series of Specifier for example (value1a,value1b,value1c) should be mapped to value1 , value2 , value3 respectively
Edited Part 3
Hi , Thanks for the response , i tried to unmarshall this example , what i found is that , i am getting null
This is the request i passed
<sampleRequest user="user" account="account" Specifier="v1,v2,v3 : a1,a2,a3"/>
Just want to make sure that , is my Specifier class is correct or not ?? (As i did not use any Annotations here )
package com;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlJavaTypeAdapter(SpecifierAdapter.class)
public class Specifier {
Specifier(String v1 , String v2 , String v3)
{
}
String value1;
public String getValue1() {
return value1;
}
public void setValue1(String value1) {
this.value1 = value1;
}
public String getValue2() {
return value2;
}
public void setValue2(String value2) {
this.value2 = value2;
}
public String getValue3() {
return value3;
}
public void setValue3(String value3) {
this.value3 = value3;
}
String value2;
String value3;
}
I've been prepared my answer with my IDE.
You removed your question(11887278) and asked again.
I thought and think that this requirement is not a good idea. I was just interested in your question because I've never do those multiple strings to an attribute.
My code is interestingly very same what Senthil Kumar explained.
Please see the full mavenized project at https://code.google.com/p/jinahya/source/browse/trunk/com.googlecode.jinahya/stackoverflow/src/main/java/com/googlecode/jinahya/stackoverflow/q11887278/
Please
Here comes 10 examples which each is marshalled an unmarshalled
NOTE: The adapter code could be made simpler by using guava-library's Joiner and Splitter.
SampleRequest
Adapter
Usage
Output
You can try the following implementation for SpecifierAdapter.java