如何在OCC中使用XSD生成的类?

2020-09-30 04:03发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试集成一个外部服务,该服务公开了RESTful API,以便能够发送和接收XML数据。 为此,我正在考虑使用OCC封送和取消封送数据,但到目前为止,我仍然无法使其工作。

在OCC文档中说明了能够处理没有XML批注的Java类来执行与XML的数据转换,但是我需要使用的类是由外部服务通过XSD定义的,并且我使用了Jaxb 生成带有XML批注的Java类。

因此,当我使用从其中一个XSD生成的类处理某个请求时,例如:

  @RequestMapping(value ="/",method = RequestMethod.POST)
  @ResponseStatus(HttpStatus.OK)
  公共无效requestHandler(@RequestBody final SomeClass someClass){
  

我最终遇到了这个例外:

 错误[RestHandlerExceptionResolver] org.springframework.http.converter.HttpMessageConversionException:无法实例化类[de.hybris.platform.someextension.SomeClass]的JAXBContext: 嵌套的异常是javax.xml.bind.JAXBException-带有链接的异常:
  [java.lang.NullPointerException]
      在de.hybris.platform.webservicescommons.jaxb.Jaxb2HttpMessageConverter.getJaxbContext(Jaxb2HttpMessageConverter.java:238)[..]
  

我想知道是否有任何方法可以处理从XSD生成的,未使用OCC在bean XML中定义的复杂类。

谢谢

乔瓦尼

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试集成一个外部服务,该服务公开了RESTful API,以便能够发送和接收XML数据。 为此,我正在考虑使用OCC封送和取消封送数据,但到目前为止,我仍然无法使其工作。

在OCC文档中说明了能够处理没有XML批注的Java类来执行与XML的数据转换,但是我需要使用的类是由外部服务通过XSD定义的,并且我使用了Jaxb 生成带有XML批注的Java类。

因此,当我使用从其中一个XSD生成的类处理某个请求时,例如:

  @RequestMapping(value ="/",method = RequestMethod.POST)
  @ResponseStatus(HttpStatus.OK)
  公共无效requestHandler(@RequestBody final SomeClass someClass){
  

我最终遇到了这个例外:

 错误[RestHandlerExceptionResolver] org.springframework.http.converter.HttpMessageConversionException:无法实例化类[de.hybris.platform.someextension.SomeClass]的JAXBContext: 嵌套的异常是javax.xml.bind.JAXBException-带有链接的异常:
  [java.lang.NullPointerException]
      在de.hybris.platform.webservicescommons.jaxb.Jaxb2HttpMessageConverter.getJaxbContext(Jaxb2HttpMessageConverter.java:238)[..]
  

我想知道是否有任何方法可以处理从XSD生成的,未使用OCC在bean XML中定义的复杂类。

谢谢

乔瓦尼

付费偷看设置
发送
1条回答
CPLASF-自律
1楼 · 2020-09-30 04:42.采纳回答

嗨,

OCC中使用的Jaxb2HttpMessageConverter设计用于POJO类。 它创建的JAXB上下文构成了类本身,并且忽略了它的所有注释。 您获得的NPE可能是由OCC生成的JAXB上下文不适合您生成和注释的类引起的。

使Jaxb2HttpMessageConverter适应您的需求可能是不可能的,但是有一种解决方法。 您需要在OCC使用的messageConvertersList中添加支持标准JAXB的自己的messageConverter。

在/ycommercewebservices/web/webroot/WEB-INF/config/v2/jaxb-converters-spring.xml中将messageConverters列表声明为messageConvertersV2。 您可以在该列表的顶部添加一个适当的bean,或为此使用addon和listMergeDirective(推荐方法)。

我会尝试使用org.springframework.http.converter.xml.MarshallingHttpMessageConverter和org.springframework.oxm.jaxb.Jaxb2Marshaller。 我从未使用过它们,但是文档看起来很有希望。 只要确保您的messageConverter只支持您生成的类,那么其余的仍将由hybris Jaxb2HttpMessageConverter处理。

一周热门 更多>