Карта JAXB со списками - PullRequest
       2

Карта JAXB со списками

1 голос
/ 06 марта 2012

Я должен извиниться, я поклялся себе, что не спрашиваю об этом, поскольку это обычная тема, но, несмотря на все подобные вопросы, у меня все еще есть проблемы.

Обновление: Я нашел некоторыеошибки в моем коде, которые я исправил, но это продолжает давать сбой.Я обновил сообщение, чтобы отразить последние изменения.

Обновление 2: Я решил упростить код, вместо использования методов для установки атрибутов, я изменяю их все на общедоступные и избавляюсьметодов.Сейчас он компилируется и запускается без проблем, но получившаяся Карта пуста.Это новый код.

public class BCLURLClearanceIssuer
{
private File xml = null;
private JAXBContext aJAXBContext = null;
private Unmarshaller unmarshaller = null;
private BCLURLRestrictions aURLRestrictionList = null;

public BCLURLClearanceIssuer()
    {
    this.xml = new File("/www/hosts/www.bucle.co/webapps/ROOT/WEB-INF/BCLURLRestrictions.xml");
    try{
        this.aJAXBContext = JAXBContext.newInstance(BCLURLRestrictions.class);
        }
    catch (JAXBException e)
        {
         System.out.println(e);
        }
    try
        {
        this.unmarshaller = aJAXBContext.createUnmarshaller();
        }
    catch (JAXBException e2)
        {
        System.out.println(e2);
        }

        unmarshaller.setAdapter(new BCLMapAdapter());
    try
        {
        this.aURLRestrictionList = (BCLURLRestrictions) unmarshaller.unmarshal(this.xml);
        }
    catch(JAXBException e3)
        {
        System.out.println(e3);
        }
    }

public Map<String,BCLURLRestriction> getRestrictions()
    {
    return this.aURLRestrictionList.getRestrictions();
    }
}

Моя цель - прочитать XML-файл, подобный следующему:

<?xml version="1.0" encoding="UTF-8"?>
<BCLURLRestrictions>
<restriction>
    <appName>app1</appName>
    <url>/apps/app1/</url>
    <page>app1.html</page>
    <page>app1b.html</page>
</restriction>
<restriction>
    <appName>app2</appName>
    <url>/apps/app2/</url>
    <page>app2.html</page>
</restriction>
</BCLURLRestrictions>

Это участвующие классы.

public class BCLURLRestriction
    {

    @XmlElement(name = "AppName")
    public String name;

    @XmlElement(name = "url")
    public List<String> urls;

    @XmlElement(name = "page")
    public List<String> pages;


    }

BCLURLRestrictions.java

@XmlRootElement(name = "BCLURLRestrictions")
@XmlAccessorType(XmlAccessType.FIELD)
public class BCLURLRestrictions
{

@XmlJavaTypeAdapter(BCLMapAdapter.class)
public Map <String,BCLURLRestriction> restrictionMap = new HashMap<String,BCLURLRestriction>();

public Map <String,BCLURLRestriction>  getRestrictionMap()
    {
    return this.restrictionMap;
    }

public void  setRestrictionMap(Map aMap)
    {
    this.restrictionMap = aMap;
    }
}

BCLURLRestrictionListType.java

public class BCLURLRestrictionsListType 
{


public List <BCLURLRestriction> restrictionsList = new ArrayList<BCLURLRestriction>();

public BCLURLRestrictionsListType()
    {
    }

}

BCLMapAdapter.java

public class BCLMapAdapter extends XmlAdapter<BCLURLRestrictionsListType,Map<String,BCLURLRestriction>> 
{

public BCLMapAdapter()
    {

    }

public Map<String,BCLURLRestriction> unmarshal(BCLURLRestrictionsListType aRestrictionListType) throws Exception 
    {
    HashMap<String,BCLURLRestriction> aRestrictionMap = new HashMap<String,BCLURLRestriction>();
    for(BCLURLRestriction aRestriction: aRestrictionListType.restrictionsList)
        {
        aRestrictionMap.put(aRestriction.name,aRestriction);
        }
    return aRestrictionMap;
    }


public BCLURLRestrictionsListType marshal(Map<String,BCLURLRestriction> aRestrictionMap) throws Exception
    {
    BCLURLRestrictionsListType aRestrictionsListType = new BCLURLRestrictionsListType();
    for(Entry<String, BCLURLRestriction> aRestrictionEntry: aRestrictionMap.entrySet())
        {
        BCLURLRestriction aRestriction = new BCLURLRestriction();
        aRestriction.name = aRestrictionEntry.getValue().name;
        aRestriction.urls = aRestrictionEntry.getValue().urls;
        aRestriction.pages = aRestrictionEntry.getValue().pages;
        aRestrictionsListType.restrictionsList.add(aRestriction);
        }

    return aRestrictionsListType;
    }


}

Все предложения приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...