Клиент Spring-WS

Я пытаюсь вызвать веб-службу и добавить вложение к моему запросу, используя mtom. Mtom включен в веб-службе, которую я вызываю, и я могу нормально вызвать службу с помощью soapui.

Схема запроса выглядит следующим образом;

<element name="MyRequest">
    <complexType>
        <sequence>
            ...
            <element name="content" type="base64Binary"
                xmime:expectedContentTypes="text/xml" />
        </sequence>
    </complexType>
</element>

Затем в моем Java-коде я создаю объект запроса jaxb и пытаюсь установить содержимое из строки;

MyRequest request = factory.createMyRequest();

StreamSource ss = new StreamSource(new StringReader("some content..."));

request.setContent(ss);

WebServiceTemplate wst = ...;

wst.marshalSendAndReceive(request);

Я настроил свой маршаллер на включение mtom (хотя я не уверен, что это необходимо на клиенте);

<bean id="my-marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="contextPath" value="..."/>
    <property name="mtomEnabled" value="true"/>
</bean>

Но я получаю следующее исключение;

javax.xml.transform.TransformerFactoryConfigurationError: Provider net.sf.saxon.TransformerFactoryImpl not found

Есть ли у кого-нибудь идеи о том, что я делаю неправильно, или кто-нибудь может показать мне пример того, как маршалировать запрос jaxb с вложением mtom из клиента spring-ws? Помощь будет принята с благодарностью.


person mpc    schedule 29.01.2013    source источник


Ответы (1)


На самом деле это было так же просто, как добавить saxon в мой classpath/pom. Я думаю, что материал сообщения saaj в клиенте spring-ws настаивает на использовании saxon, чтобы вставить источник для вложения mtom в сгенерированный запрос.

Мой код на самом деле работает, но я оставлю его здесь, так как при большом количестве поисков в сети я не смог найти хороших примеров того, как отправить запрос jaxb с вложением mtom из клиента spring-ws, чтобы другие могли найти это полезный.

person mpc    schedule 29.01.2013