преобразование ответа мыла обратно в строку XML в Spring Boot - PullRequest
0 голосов
/ 08 октября 2019

Я использую весеннюю загрузку. Я сгенерировал объекты запроса / ответа мыла, используя apache CXF.

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.3.3</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${basedir}/src/main/resources/wsdl/...</wsdl>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Я хочу сериализовать объект запроса JAXB, который я получаю после выполнения веб-службы обратно в xml , чтобы сохранить егона диске для последующего повторного использования.

Я пробовал это:

JAXBContext context = JAXBContext.newInstance(instance.getClass().getPackage().getName());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter sw = new StringWriter();
marshaller.marshal(instance, sw);
String xml = sw.toString();

Но я получаю сообщение об ошибке ниже:

"невозможно выполнить маршалинг типа \"com.uk.services.consumer.schema.v4.search.searchresponse.QuotationSearchResponse \ "как элемент, так как отсутствует аннотация @XmlRootElement"}

Как сериализовать объекты, созданные apache CXF назад к XML . Я использую Spring Boot .


для справки, сгенерированный источник из CXF выглядит следующим образом.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "QuotationSearchResponse")
public class QuotationSearchResponse
    extends CommonResponse
{   
}

1 Ответ

1 голос
/ 08 октября 2019

Если вы хотите упорядочить объект, у которого нет аннотации @XmlRootElement, вы можете попробовать изменить эту строку:

marshaller.marshal(instance, sw);

В эту (измените InstanceClass соответственно)

marshaller.marshal(new JAXBElement<InstanceClass>(new QName("uri","local"), InstanceClass.class, instance), sw);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...