2015-05-30 2 views
0

У меня есть простая трансформация. У меня есть объект java для преобразования в другой Java-объект. поэтому я использовал xslt. jaxb - мой процессор.Обработка XSLT с jaxb для небольших преобразований

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      StreamSource streamSource = new StreamSource(
        new File("conv.xsl")); 
      Transformer transformer = transformerFactory.newTransformer(streamSource); 
      JAXBContext jc =JAXBContext.newInstance(Bags.class); 
      JAXBSource jAXBSource = new JAXBSource(jc, device); 
jAXBResult = new JAXBResult(JAXBContext.newInstance(LargeBags.class)); 

      transformer.transform(jAXBSource, jAXBResult); 

return result.getResult(); 

Можно ли так выглядеть в перспективе? Я могу сделать это с помощью java-кода. это большая проблема с производительностью? или хорошая практика? пожалуйста, помогите мне и оцените ваши комментарии. в дополнение к этому Если у меня небольшая группировка и вычисление xslt - хороший подход?

ответ

0

С точки зрения производительности, конечно, это не оптимально: сериализация в xml, преобразование xml, десериализация из xml - дорогостоящие операции. Но это иногда имеет смысл, если у вас много «похожих» классов (например, разные имена полей, но соответствующие логике (например, один пользовательский поле другого человека и т. Д.), Так как редактирование листов xslt для обеспечения конверсии реализации выполняется быстрее и проще, чем создание нового класса адаптера.

Но вы определенно должны ускорить процесс,

Создать JAXBContext один раз, а не при каждом вызове, создавая контекст JAXB очень дорогостоящие операции. например, хранить его в карте, которая ключи являются классом, который использовался для JaxbCreation:

JAXBContext getContext(Class cls) { 
    if (contexts.containsKey(cls)) return contexts.get(cls); 
    JAXBContect context = JAXBContext.newInstance(cls); 
    contexts.put(cls,context); 
    return context; 
} 
... 
JAXBContext jc =getContext(Bags.class); 

Тот же трюк, с трансформаторами.

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

Смежные вопросы