これが状況です。
Spring 3 MVC でEclipseLink MOXyを使用して JSON 出力を生成すると、次のステートメントで json メディア タイプを設定しようとすると、次の例外がスローされます。
marshaller.setProperty(JAXBContextProperties.MEDIA_TYPE, "アプリケーション/json");
javax.xml.bind.PropertyException: name: eclipselink.media-type value: application/json
at org.eclipse.persistence.jaxb.JAXBMarshaller.setProperty(JAXBMarshaller.java:520)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
私は JAXBviews も使用して、アプリケーション内の他のサービスの xml 出力を生成しています。同じための application-context.xml の Bean 宣言を次に示します。
<bean id="jaxbMarshaller" class="com.abc.restws.marshallers.ClasspathScanningJaxb2Marshaller">
<property name="basePackages" ref="jaxbBasePackages" />
</bean>
<bean id="jaxbMarshallingView" class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller" ref="jaxbMarshaller"/>
</bean>
<bean id="jaxbJsonMarshallingView" class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="contentType" value="application/json"/>
<property name="marshaller" ref="jaxbJsonMarshaller"/>
</bean>
このエラーの理由は何ですか? このエラーを修正するにはどうすればよいですか? XML 出力は正常に生成されますが、JSON の場合、この例外がスローされます。例外の詳細で、正しい JAXBMarshaller クラスも使用して json メディア タイプを設定していることがわかります。ご意見をお聞かせください。
"org.eclipse.persistence.jaxb.JAXBMarshaller.setProperty(JAXBMarshaller.java:520)"