среда, 17 июля 2013 г.

Настройка старта IBM Websphere MQ и Message Broker как системного сервиса на SUSE Linux Enterprise Server 11 SP2 и CentOS 6.6

Для того, что бы Websphere MQ и  Message Broker автоматически запускались при старте системы выполняем следующие действия:

1) Качаем с сайта IBM Support Pack "MSL1: WebSphere MQ for Linux - Automatic Startup"

2) Разархивируем его и запускаем MSL1-1.0.1-1.noarch.rpm на установку
sudo rpm -ivh MSL1-1.0.1-1.noarch.rpm

3) Проверяем в YAST->System-> System Services (Runlevel), что бы ibm.com-WebSphere_MQ был в статусе "enabled". В случае необходимости включаем его

4) Готово

Для автоматического старта Message Broker вместе с MQ он должен быть объявлен как defined
./mqsicreatebroker QM_DEV1.BRK -q QM_DEV1 -d defined
Это можно сделать как при создании (строка выше), так изменить уже созданный экземпляр (см. справку Message Broker)

Если нет возможности установить rpm, то можно залезть внутрь него любым архиватором и выдернуть из него файлы /etc/conf.d/ibm.com-WebSphere_MQ и /etc/init.d/ibm.com-WebSphere_MQ и положить их в соответствующие папки на сервере. После чего включить сервис в YAST->System-> System Services (Runlevel)

вторник, 16 июля 2013 г.

Настраиваем FTP сервер на OpenSUSE на примере vsftpd


Постановка задачи:
Настроить FTP сервер на OpenSUSE
Без анонимного доступа.
Создать одного пользователя с возможностью записи в заданную папку.
Остальные пользователи должны иметь доступ в свои домашние папки.
Все пользователи должны быть закрыты в своих домашних папках, но должна быть возможность выборочно разрешать выход в файловую систему (согласно правам самих пользователей)

su
zypper install vsftpd
zypper install yast2-ftp-server
yast
YAST->Network Services->FTP Server:
Start-Up->Service Start->(x) When booting
General->[x] Chroot Everyone
General->FTP Directory for Authenticated Users=/storage/ftp
Authentication->Enable/Disable Anonymous and Local->(x) Authenticated Users Only
Authentication->Uploading->[x] Enable Upload
/etc/init.d/vsftpd restart
mkdir /storage/ftp
mkdir /storage/ftp/ftpuser
groupadd ftp-users
chown root:ftp-users /storage/ftp
chown ftpuser:ftp-users /storage/ftp/ftpuser
useradd -g ftp-users -d /storage/ftp/ftpuser ftpuser
passwd ftpuser
chmod 550 /storage/ftp
chmod 750 /storage/ftp/ftpuser
Мой рабочий конфиг (/etc/vsftpd.conf)

pasv_min_port=30000
pasv_max_port=30100
anon_mkdir_write_enable=NO
anon_root=/srv/ftp
anon_upload_enable=NO
chroot_local_user=YES #Закрывает пользователей в своих домашних директориях
allow_writeable_chroot=YES #Боремся с ошибкой 'vsftpd: refusing to run with writable root inside chroot ()'
passwd_chroot_enable=YES 
chroot_list_enable=YES #В файле /etc/vsftpd.chroot_list содержится список пользователей, которых не надо закрывать в своей домашней директрии
ftpd_banner=Welcome message
idle_session_timeout=900
log_ftp_protocol=NO
max_clients=10
max_per_ip=3
pasv_enable=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=YES

понедельник, 8 июля 2013 г.

Message Broker: формирование MQ сообщения для JMS

Периодически возникает задача формирования корректного MQ сообщения, такого, что бы его могло нормально распознать и распарсить приложение написанное на Java и работающее с MQ через JMS (далее просто JavaApp).
Для того, что бы JavaApp могло нормально распознать MQ сообщение необходимо заполнение следующих полей в заголовке сообщения (скрины сделаны из rfhutil):





С параметрами MQ MessageFormat, MessageType и полями в RFH.usr проблем не возникает.
Пример заполнения в коде (обязательные поля выделены жирным):

SET OutputRoot.MQMD.MsgType = MQMT_REQUEST;
SET OutputRoot.MQMD.Format = MQFMT_RF_HEADER_2;
SET OutputRoot.MQMD.Encoding = MQENC_NATIVE;
SET OutputRoot.MQMD.CodedCharSetId = 1208;
SET OutputRoot.MQRFH2.(MQRFH2.Field)Format = MQFMT_STRING;
SET OutputRoot.MQRFH2.jms.Dlv = '2'; -- Желательно указать для того, что бы было заполнено поле MQRFH2.jms
SET OutputRoot.MQRFH2.usr.TargetFunctionName = 'autoFinishCall';

Примечание: поле MQRFH2.usr.TargetFunctionName используется в продуктах IBM Websphere ESB для определения целевой функции и не является обязательным для корректного распознавания JMS-клиентом.

Но для задания Message Domain значения 'jms_text' простая запись вида:
OutputRoot.MQRFH2.mcd.Msd = 'jms_text';
не помогает.
ВНИМАНИЕ: для версии WMB 8.0.0.5 совет из описания ниже уже не актуален, так как все работает в виде
OutputRoot.MQRFH2.mcd.Msd = 'jms_text';

Для этого требуется требуется выполнить следующие действия:

Вставляем в message flow проекта сразу перед 'MQOutput Node' компоненту 'Reset Content Descriptor Node' (Prepare JMS Message на схеме) и заполняем в ней поле Message domain значением 'jms_text'.
Этим мы сбрасываем свойство Message Domain сообщения в необходимое значение.
При необходимости после отправки сообщения снова вставляем компоненту 'Reset Content Descriptor Node'  (Reset to XMLNSC на схеме)  и заполняем в ней поле Message domain значением значением из выпадающего списка, например 'XMLNSC'

Пример:

В этом случае Java JMS клиенты корректно принимают сообщения отправленные из Message Broker.

воскресенье, 30 июня 2013 г.

Работа с пользователями и группами в Linux

Добавление нового пользователя и включение его в указанную группу, флаг -m создает для пользователя домашнюю директорию
useradd -m -G {group-name} {username}

Задание пароля
passwd {username}

Информация о пользователе
id {username}

Информация о пользователях в группе
grep {group-name} /etc/group

Добавление группы
groupadd {group-name}

Добавление существующего пользователя в группу
OpenSUSE/SLES
usermod -A {group-name} {username} 
CentOS/Redhat
usermod -a -G {group-name} {username}

Удаление существующего пользователя из группы
usermod -R {group-name} {username}

Удаление существующего пользователя
userdel {username}

пятница, 7 июня 2013 г.

Установка IBM WebSphere Message Broker Toolkit V8 на SUSE Linux Enterprise Server 11 SP2 и CentOS 6.6

Продолжаем цикл статей по установке Message Broker на SLES11SP2

Предыдущие части:
Установка IBM Websphere MQ 7.5 на SUSE Linux Enterprise Server 11 SP2 и CentOS 6.6
Установка IBM Websphere MessageBroker 8 на SUSE Linux Enterprise Server 11 SP2 и CentOS 6.6
Настройка ODBC datasource для IBM Websphere Message Broker

Установку будем выполнять в silent-режиме, так как Message Broker Toolkit может быть нужен не только для разработки, но и для сборки проекта из исходников, например при организации сборочного конвейера (об этом планирую написать в следующей статье)

Собственно в установке ничего сложного нет:

Установка Message Broker Toolkit


1) Качаем и распаковываем дистрибутив (три пакета должны быть распакованы в одну папку)
После распаковки должны получиться лежащие рядом три папки (disk1, disk2 и disk3)

2) Заходим в disk1

3) Запускаем процесс инсталляции под root
sudo ./installToolkit-silent.sh

4) Ждем окончания процесса установки

5) Все готово
Toolkit поставился по-умолчанию и /opt/IBM/WMBT800 и доступен в списке приложений SUSE

Обновление Message Broker Toolkit

Теперь поставим последние патчи на Toolkit (я обновлял до 8.0.0.2)
Ставим обновления сразу с сайта IBM, поэтому должен быть доступ к интернет.

1) IBM Installation Manager у нас уже поставился вместе с Toolkit, поэтому идем в папку /opt/IBM/InstallationManager/eclipse/tools
cd /opt/IBM/InstallationManager/eclipse/tools

2) Установку производим в консольном режиме:
sudo ./imcl -c

3) Проходим по всех шагам мастера установки, отвечая на вопросы

4) Дожидаемся окончания установки

5) Готово. Теперь у нас обновленный до последней версии Toolkit.



четверг, 6 июня 2013 г.

Установка IBM Websphere Message Broker и Message Broker Explorer v8 на SUSE Linux Enterprise Server 11 SP2 и CentOS 6.6

В данной статье рассказано о установке IBM Websphere MessageBroker 8 на  SUSE Linux Enterprise Server 11 SP2

Перед выполнением инструкций необходимо установить IBM Websphere MQ 7.5
Инструкция приведена в статье Установка IBM Websphere MQ 7.5 на SUSE Linux Enterprise Server 11 SP2 и CentOS 6.6.

1) Распаковываем дистрибутив (В моем случае дистрибутив версии 8.0.0.1)

2) Переходим в папку с распакованным дистрибутивом

3) Запускаем инсталлятор в консольном режиме
sudo ./setuplinuxx64 -i console

4) Проходим по всем этапам установки (можно указать путь по которому производится установка)

5) Добавляем пользователей в группу mqbrkrs
OpenSUSE/SLES
sudo /usr/sbin/usermod -A mqbrkrs {user}
sudo /usr/sbin/usermod -A mqbrkrs root
CentOS/Redhat
sudo /usr/sbin/usermod -a -G mqbrkrs {user}
sudo /usr/sbin/usermod -a -G mqbrkrs root

6) При необходимости ставим патч (В моем случае дистрибутив версии 8.0.0.5)
Распаковываем дистрибутив патча в отдельную папку, переходим в нее и повторяем шаги 3 и 4 описанные ранее

7) Переходим в папку с установленным MessageBroker
cd /opt/ibm/mqsi/8.0.0.5/bin

8) Создаем новый broker, запускаем его и смотрим статус
. ./mqsiprofile
./mqsicreatebroker QM_DEV1.BRK -q QM_DEV1 -d defined
./mqsistart QM_DEV1.BRK
./mqsireportbroker QM_DEV1.BRK

9) Копируем из папки /opt/ibm/mqsi/8.0.0.2/ODBC/unixodbc в папку /var/mqsi/odbc файл odbc.ini

10) Создаем в папке /var/mqsi/common/profiles файл odbc.sh (не забываем установить флаг на исполнение) со следующим содержимым:

#!/bin/sh
ODBCINI=${MQSI_WORKPATH}/odbc/odbc.ini
export ODBCINI

11) Выполняем действия описанные в статье Настройка ODBC datasource для IBM Websphere Message Broker

12) Для запуска WMB можно создать скрипт со следующим содержимым:

#!/bin/sh
. /opt/ibm/mqsi/8.0.0.5/bin/mqsiprofile
/opt/ibm/mqsi/8.0.0.5/bin/mqsistart QM_DEV1.BRK

13) Готово

При необходимости устанавливаем MessageBroker Explorer из папки /MBExplorer (на сервере с доступом только через консоль (без GUI) не нужно)

1) В распакованном ранее дистрибутве переходим в папку MBExplorer
cd /MBExplorer

2) Запускаем установку в консольном режиме
sudo ./install.bin -i console

3) Проходим по всем этапам установки (можно указать путь по которому производится установка)

4) Готово

среда, 5 июня 2013 г.

Установка IBM Websphere MQ и MQ Explorer 7.5 на SUSE Linux Enterprise Server 11 SP2 и CentOS 6.6

В данной статье рассказано о установке IBM Websphere MQ 7.5 на  SUSE Linux Enterprise Server 11 SP2 (SLES 11 SP2) и CentOS 6.6.

1) Распаковываем дистрибутив

2) Переходим в папку с распакованным дистрибутивом

3) Принимаем лицензионное соглашение
sudo ./mqlicense.sh

4) Устанавливаем необходимые пакеты:
sudo rpm -ivh MQSeriesRuntime-7.5.0-0.x86_64.rpm MQSeriesServer-7.5.0-0.x86_64.rpm MQSeriesSDK-7.5.0-0.x86_64.rpm MQSeriesClient-7.5.0-0.x86_64.rpm MQSeriesJava-7.5.0-0.x86_64.rpm MQSeriesJRE-7.5.0-0.x86_64.rpm

Для того, что бы установить компоненты в директорию, отличную от директории по-умолчанию (/opt/mqm)
используем
sudo rpm --prefix /opt/customLocation -ivh MQSeriesRuntime-7.5.0-0.x86_64.rpm MQSeriesServer-7.5.0-0.x86_64.rpm MQSeriesSDK-7.5.0-0.x86_64.rpm MQSeriesClient-7.5.0-0.x86_64.rpm MQSeriesJava-7.5.0-0.x86_64.rpm MQSeriesJRE-7.5.0-0.x86_64.rpm

4.1) При необходимости устанавливем MQ Explorer (на сервере с доступом только через консоль(без GUI) не нужно)
sudo rpm -ivh MQSeriesExplorer-7.5.0-0.x86_64.rpm

5) Добавляем пользователей в группу mqm
OpenSuse/SLES
sudo /usr/sbin/usermod -A mqm {user}
sudo /usr/sbin/usermod -A mqm root
CentOS/Redhat
sudo /usr/sbin/usermod -a -G mqm {user}
sudo /usr/sbin/usermod -a -G mqm root

6) Устанавливаем проинсталлированный MQ как профиль по-умолчанию
cd /opt/mqm/bin
sudo ./setmqinst -i -p /opt/mqm

7) Проверяем установку
dspmqver
В результате получаем:
Name:        WebSphere MQ
Version:     7.5.0.0
Level:       p000-L120604
BuildType:   IKAP - (Production)
Platform:    WebSphere MQ for Linux (x86-64 platform)
Mode:        64-bit
O/S:         Linux 3.0.13-0.27-default
InstName:    Installation1
InstDesc:  
InstPath:    /opt/mqm
DataPath:    /var/mqm
Primary:     Yes
MaxCmdLevel: 750

8) Создаем QueueManager, запускаем его, смотрим статус
crtmqm QM_DEV1
strmqm QM_DEV1
dspmq -m QM_DEV1
В ответ на последнюю команду должны получить:
QMNAME(QM_DEV1)                                           STATUS(Running)

9) При необходимости отключаем Channel Authentication (Подробнее можно почитать по этой ссылке)
Запускаем консоль MQ:
runmqsc QM_DEV1

В консоли вводим команду:
ALTER QMGR CHLAUTH(DISABLED)

10) Создаем Listener
Запускаем консоль MQ:
runmqsc QM_DEV1
Создаем Listener
DEFINE LISTENER(DEFLISTENER) TRPTYPE(TCP) PORT(1414) CONTROL(QMGR) DESCR('Default listener')
Запускаем его
START LISTENER(DEFLISTENER)
Смотрим статус
DISPLAY LISTENER(DEFLISTENER)

11) Все готово

вторник, 14 мая 2013 г.

Форматируем XML из строки


Иногда возникает необходимость отформатировать XML представленный в виде linarized строки (то есть без отступов и переводов строки) Для этого я использую следующие функции:

import java.io.ByteArrayOutputStream;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;

public class XMLUtils {

 private static final Logger logger = Logger.getLogger(XMLUtils.class);

 /**
  * Возвращает переформатированную строку
  * 
  * @param inputString
  *            Строка содержащая неформатированный XML
  * @return Строка содержащая отформатированный XML
  */
 public static String formatXMLString(String inputString) {
  String outputString = "";
  try {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   DocumentBuilder db = dbf.newDocumentBuilder();
   InputSource is = new InputSource(new StringReader(inputString));
   Document document = db.parse(is);
   outputString = documentToFormattedString(document);
  } catch (Exception ex) {
   logger.warn(ex.getMessage(), ex);
  }
  return outputString;
 }

 /**
  * Возвращает строковое представление Узла(Node) в форматированном виде
  * 
  * @param node
  *            Объект Node
  * @return Строка содержащая отформатированный XML
  */
 public static String documentToFormattedString(Node node) {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();

  try {
   DOMSource source = new DOMSource(node);
   StreamResult result = new StreamResult(baos);
   TransformerFactory transFactory = TransformerFactory.newInstance();
   Transformer transformer = transFactory.newTransformer();
   transformer
     .setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
   transformer.setOutputProperty(OutputKeys.METHOD, "xml");
   transformer.setOutputProperty(OutputKeys.INDENT, "yes");
   // Без данного параметра не работают отступы
   transformer.setOutputProperty(
     "{http://xml.apache.org/xslt}indent-amount", "2");
   transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

   transformer.transform(source, result);

  } catch (Exception ex) {
   logger.warn(ex.getMessage(), ex);
  }

  return new String(baos.toByteArray());
 }
}

понедельник, 29 апреля 2013 г.

Настройка ODBC datasource для IBM Websphere Message Broker


1) Настраиваем ODBC источник (ODBC.ini для *nix или через панель управления для Windows)

Для Windows - через панель управления (Панель управления->Администрирование->Источники данных (ODBC)->Системный DSN)
Создаем новой источник данных. В качестве драйвера выбираем "Websphere Message Broker ({Версия брокера}) - DataDirect Technologies {Название СУБД}"
Прописываем все необходимые параметры в открывшемся окне

Для *nix настройку производим через odbc.ini (для WMB 8.0 файл по-умолчанию лежит в /var/mqsi/odbc)


2) Выполняем команду
. ./mqsiprofile
./mqsisetdbparms {BROKER_NAME} -n {datasource_name} -u {user_name} -p {password}
Должно появится сообщение о успешном выполнении команды:
BIP8071I: Successful command completion. 

3) Для проверки выполняем команду
./mqsicvp -n {datasource_name} -u {user_name} -p {password}
Должно появится сообщение о успешном выполнении команды:

Длинная простыня описания БД, драйвера и т.п.
и в конце BIP8071I: Successful command completion. 

Все готово

среда, 24 апреля 2013 г.

Запуск OpenJPA приложения с помощью JUnit

в параметрах JVM необходимо указать путь к openjpa.jar

Например:
-javaagent:c:\Users\e.kermas\.m2\repository\org\apache\openjpa\openjpa\2.2.0\openjpa-2.2.0.jar

среда, 13 марта 2013 г.

Функция, которая возвращает первый элемент типа Node.ELEMENT_NODE из SOAPBody

Возвращает первый элемент типа Node.ELEMENT из SOAPBody.
Необходима в случае отформатированного документа.
Тогда содержимое body представляет собой массив из трех Node:
Первая и последняя ноды представляют собой Node.TEXT_NODE с содержимым = "\n" или чем-то подобным (табуляции, переводы строки и т.п.).
Для получения значимого содержимого перебираем массив через body.getChildElements() и находим Node с типом Node.ELEMENT_NODE

/**
  * Возвращает первый элемент из SOAPBody
  * Необходимо в случае отформатированного документа, когда body.getFirstChild() == "\n"
  * @param body
  * @return
  */
 public Node getFirstChildElement(SOAPBody body) {
  @SuppressWarnings("unchecked")
  Iterator nodes = body.getChildElements();
  while (nodes.hasNext()) {
   Node currentNode = nodes.next();
   if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
    return currentNode;
   }
  }
  return null;
 }

Получаем строковое представление Узла(Node) в форматированном виде


    /**
     * Возвращает строковое представление Узла(Node) в форматированном виде
     *
     * @param node Объект Node
     * @return Строковое представление
     */
    public static String documentToFormattedString(Node node) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        try {
            DOMSource source = new DOMSource(node);
            StreamResult result = new StreamResult(baos);
            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transformer = transFactory.newTransformer();

            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            
            transformer.transform(source, result);

        } catch (Exception ex) {
            logger.warn(ex.getMessage(), ex);
        }

        return new String(baos.toByteArray());
    }

вторник, 12 марта 2013 г.

Возможные значения hibernate.hbm2ddl.auto


validate: validate the schema, makes no changes to the database.
update: update the schema.
create: creates the schema, destroying previous data.
create-drop: drop the schema at the end of the session.

Установка Oracle JDK под Ubuntu 12.10



1) Идем на сайт загрузок Java SE, и качаем пакет(.rpm), согласно нашей архитектуре

2) Устанавливаем alien (конвертер пакетов rpm to deb).
sudo apt-get install alien

3) Запускаем alien.
sudo alien jdk-7u4-linux-x64.rpm --scripts
Будет сгенерирован .deb пакет, в той же директории.

4) Далее устанавливаем пакет.
sudo dpkg -i jdk_1.7.004-1_amd64.deb
mkdir -p ~/.mozilla/plugins
создаем симлинки
ln -s /usr/java/jdk1.7.0_04/jre/lib/amd64/libjavaplugin_jni.so ~/.mozilla/plugins/
ln -s /usr/java/jdk1.7.0_04/jre/lib/amd64/libnpjp2.so ~/.mozilla/plugins/

5) Если уже была установлена OpenJDK, то выполняем следующие действия:
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_04/bin/javac 1
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_04/bin/java 1
sudo update-alternatives --config javac
sudo update-alternatives --config java

6) Проверяем версию java
java -version


воскресенье, 3 марта 2013 г.

Настройка SVN через JavaHL в Eclipse под Ubuntu

Ставим Subclipse со всеми модулями в Eclipse

выполняем слудующие команды в консоли:

sudo apt-get install libsvn-java
sudo find / -name libsvnjavahl-1.so

копируем найденный путь и вставляем его в eclipse.ini (выделено жирным):


-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.200.v20120913-144807
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Djava.library.path=/usr/lib/i386-linux-gnu/jni
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m


svn: E175002: Unable to connect to a repository at URL

Если svn под Ubuntu (у меня 12.10) выдает ошибку:


xxx@xxx-wnb:~$ svn info https://svn.yyy.ru/svn/ZZZAdapter/
svn: E175002: Unable to connect to a repository at URL 'https://svn.yyy.ru/svn/ZZZAdapter'
svn: E175002: OPTIONS of 'https://svn.yyy.ru/svn/ZZZAdapter': SSL handshake failed: SSL error: Key usage violation in certificate has been detected. (https://svn.yyy.ru)


то делаем вот что:

sudo apt-get install libneon27
sudo mv /usr/lib/libneon-gnutls.so.27 /usr/lib/libneon-gnutls.so.27.old
sudo ln -s /usr/lib/libneon.so.27 /usr/lib/libneon-gnutls.so.27

Кратко о причине:
- Кривой сертификат на сервере
- Библиотека на клиентской машине не принимает кривые сертификаты

четверг, 28 февраля 2013 г.

Конвертация java.util.Date в javax.xml.datatype.XMLGregorianCalendar


private XMLGregorianCalendar convertDateToXMLGregorianCalendar(Date date) throws Throwable {
 GregorianCalendar gc = new GregorianCalendar();
 gc.setTime(date);
 return DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
}