首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Doctype添加到cXML Punchout中

将Doctype添加到cXML Punchout中
EN

Stack Overflow用户
提问于 2020-09-03 08:46:07
回答 1查看 410关注 0票数 0

目前,我们的cXML旁路实现(SAP标准)没有在响应上打印Doctype。

终端系统需要它:

代码语言:javascript
复制
Wed Sep 02 00:19:42 PDT 2020 (T12:prealm_1234:global\c1234:PasswordAdapter1:db2wer:C123_UI1)
    (application.cxml:ERROR) [ID1234]: CXMLDOMRequester: Unable to parse cXML response with error:
    org.xml.sax.SAXParseException: Document root element "cXML", must match DOCTYPE root "null".

我试着做一些研究:

一个请求转到de.hybris.platform.b2bpunchoutaddon.controllers.pages.DefaultPunchOutSetUpController.handlePunchOutSetUpRequest(),它返回一个CXML对象。这个对象经过一些映射器和转换器,但是它不添加Doctype的位置。

然后我找到了de.hybris.platform.b2bpunchoutaddon.converter.CXMLJaxb2MessageConverter。此MessageConverter将Doctype添加到xml中。但它从来没有跑过。

对我来说,spring的配置看起来是正确的:

代码语言:javascript
复制
<alias name="cXMLJaxb2MessageConverter" alias="jaxbMessageConverter" />
<bean id="cXMLJaxb2MessageConverter" class="de.hybris.platform.b2bpunchoutaddon.converter.CXMLJaxb2MessageConverter"/>

现在我对这个问题感到绝望。你们中有人知道怎么修吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-04 12:37:33

这是因为在您的店面扩展中有以下消息转换器设置:

代码语言:javascript
复制
<!-- activates annotation driven binding -->
<mvc:annotation-driven ignore-default-model-on-redirect="true" validator="validator">
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
        <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>

因此,这个spring配置当然会忽略b2bpunchoutaddon创建的bean。

代码语言:javascript
复制
<alias name="cXMLJaxb2MessageConverter" alias="jaxbMessageConverter" />
<bean id="cXMLJaxb2MessageConverter" class="de.hybris.platform.b2bpunchoutaddon.converter.CXMLJaxb2MessageConverter"/>

我的解决办法是改变我的店面spring配置,用id="jaxbMessageConverter“而不是内联bean来使用bean:

代码语言:javascript
复制
<bean id="jaxbMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>

<!-- activates annotation driven binding -->
<mvc:annotation-driven ignore-default-model-on-redirect="true" validator="validator">
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
        <ref bean="jaxbMessageConverter"/>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>

现在,我们知道别名将起作用,响应将包含doctype:

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.024/cXML.dtd">
<cXML payloadID="1609762719111.6059@DESKTOP-3HR841G" timestamp="2021-01-04T14:18:39+02:00" xml:lang="en-US">
    <Response>
        <Status code="200" text="success"/>
        <PunchOutSetupResponse>
            <StartPage>
                <URL>foo.bar.bla</URL>
            </StartPage>
        </PunchOutSetupResponse>
    </Response>
</cXML>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63720045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档