package uk.ac.ebi.fg.myequivalents.model; import static java.lang.System.out; import java.io.StringReader; import java.util.HashSet; import java.util.Set; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import org.junit.Test; import uk.ac.ebi.fg.myequivalents.managers.interfaces.EntityMappingSearchResult; import uk.ac.ebi.fg.myequivalents.managers.interfaces.EntityMappingSearchResult.Bundle; import uk.ac.ebi.fg.myequivalents.managers.interfaces.ExposedEntity; import uk.ac.ebi.fg.myequivalents.utils.jaxb.JAXBUtils; /** * * Simple tests about JAXB translation from XML to Java objects. * * <dl><dt>date</dt><dd>Jul 16, 2012</dd></dl> * @author Marco Brandizi * */ public class UnmarshallingTest { /** * serviceName is a read-only and shortcut getter in the superclass. If we want it to become a changeable property, * we need an extension and to use it for XML-loading purposes only. This test was a start point for the development * of the service loader. * */ @XmlRootElement ( name = "service" ) @XmlAccessorType ( XmlAccessType.NONE ) public static class MyService extends Service { private String repositoryName; protected MyService () { super (); } public MyService ( String name, String entityType, String title, String description ) { super ( name, entityType, title, description ); } public MyService ( String name, String entityType ) { super ( name, entityType ); } public MyService ( String name ) { super ( name ); } @Override public String getRepositoryName () { return repositoryName; } @Override public void setRepositoryName ( String repositoryName ) { this.repositoryName = repositoryName; } } @XmlRootElement ( name = "services" ) @XmlAccessorType ( XmlAccessType.FIELD ) public static class ServiceCollection { @XmlElement ( name = "service" ) public Set<MyService> services = new HashSet<MyService> (); } @Test public void testServiceUnmarshalling () throws Exception { String xml = "<services>\n" + " <service uri-pattern='http://somewhere.in.the.net/testemdao/service1/someType1/$id'\n" + " entity-type='testemdao.someType1' title='A Test Service 1' name='test.testemdao.service1'>\n" + " <description>The Description of a Test Service 1</description>\n" + " </service>\n" + " <service entity-type='testemdao.someType1' title='A Test Service 2' name='test.testemdao.service2'" + " repository-name = 'repo1'>\n" + " <description>The Description of a Test Service 2</description>\n" + " </service>\n" + " <service\n" + " entity-type='testemdao.someType2' title='A Test Service 3' name='test.testemdao.service3'>\n" + " <description>The Description of a Test Service 3</description>\n" + " </service>\n" + "</services>"; /*xml = "<service uri-pattern='http://somewhere.in.the.net/testemdao/service1/someType1/$id'\n" + " entity-type='testemdao.someType1' title='A Test Service 1' name='test.testemdao.service1'>\n" + " <description>The Description of a Test Service 1</description>\n" + "</service>\n";*/ JAXBContext context = JAXBContext.newInstance ( ServiceCollection.class ); Unmarshaller u = context.createUnmarshaller (); ServiceCollection sset = (ServiceCollection) u.unmarshal ( new StringReader ( xml ) ); out.println ( "size = " + sset.services.size () + ", Values:\n" ); for ( Service s: sset.services ) out.println ( s + "\n" ); // TODO: assertions } @Test public void testEntityUnMarshalEntity () { String xml = "<entity xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " + " xsi:type='exposedEntity' accession='acc3'" + " service-name='test.testweb.service6' />"; Entity e = JAXBUtils.unmarshal ( xml, ExposedEntity.class ); out.println ( "entity = " + e ); // TODO: assertions } @Test public void testEntityUnMarshalBundle () { String xml = "<bundle>" + " <entity accession='acc3' service-name='test.testweb.service6' uri='http://somewhere.in.the.net/testweb/service6/someType1/acc3'/>\n" + " <entity accession='acc4' service-name='test.testweb.service6' uri='http://somewhere.in.the.net/testweb/service6/someType1/acc4'/>\n" + " <entity accession='acc2' service-name='test.testweb.service8' uri='http://somewhere.else.in.the.net/testweb/service8/someType1/acc2'/>\n" + "</bundle>\n"; Bundle b = JAXBUtils.unmarshal ( xml, Bundle.class ); out.println ( "Bundle:" ); for ( Entity ei: b.getEntities () ) out.println ( "Bundle entity: " + ei ); // TODO: assertions } @Test public void testEntityUnMarshalSearchResult () { String xml = "<mappings>\n" + " <services>\n" + " <service xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='service' entity-type='testweb.someType1' uri-pattern='http://somewhere.in.the.net/testweb/service6/someType1/$id' name='test.testweb.service6' public-flag='true' title='A Test Service 6'/>\n" + " <service xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='service' entity-type='testweb.someType2' repository-name='test.testweb.addedRepo1' uri-pattern='http://somewhere.else.in.the.net/testweb/service8/someType1/$id' name='test.testweb.service8' public-flag='true' title='A Test Service 8'/>\n" + " <service xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='service' entity-type='testweb.someType7' repository-name='test.testweb.repo1' service-collection-name='test.testweb.serviceColl1' uri-pattern='http://somewhere.in.the.net/testweb/service7/someType1/$id' name='test.testweb.service7' public-flag='true' title='A Test Service 7'/>\n" + " </services>\n" + " <repositories>\n" + " <repository name='test.testweb.repo1' public-flag='true' title='Test Repo 1'/>\n" + " <repository name='test.testweb.addedRepo1' public-flag='true'/>\n" + " </repositories>\n" + " <service-collections>\n" + " <service-collection name='test.testweb.serviceColl1' public-flag='true' title='Test Service Collection 1'/>\n" + " </service-collections>\n" + " <bundles>\n" + " <bundle>\n" + " <entity accession='acc3' service-name='test.testweb.service6' uri='http://somewhere.in.the.net/testweb/service6/someType1/acc3'/>\n" + " <entity accession='acc4' service-name='test.testweb.service6' uri='http://somewhere.in.the.net/testweb/service6/someType1/acc4'/>\n" + " </bundle>\n" + " <bundle>\n" + " <entity accession='acc2' service-name='test.testweb.service8' uri='http://somewhere.else.in.the.net/testweb/service8/someType1/acc2'/>\n" + " <entity accession='acc1' service-name='test.testweb.service7' uri='http://somewhere.in.the.net/testweb/service7/someType1/acc1'/>\n" + " <entity accession='acc1' service-name='test.testweb.service6' uri='http://somewhere.in.the.net/testweb/service6/someType1/acc1'/>\n" + " </bundle>\n" + " </bundles>\n" + "</mappings>\n"; EntityMappingSearchResult sr = JAXBUtils.unmarshal ( xml, EntityMappingSearchResult.class ); out.println ( "Search Result:\n" + sr ); // TODO: assertions } }