Thank you Sergey,
Yes, this is a REST service built on a JAXWS Provider.
I have tried doing it two ways, one way uses an OSGi bundle activator to
create the HTTP endpoint, and there is no configuration file. So I don't
know how to set the JAXB Marshaller property, because the only object I'm
seeing is the DOMSource.

The other way I tried it is with regular JAXB annotations creating REST
service and giving it an HTTP endpoint by using a blueprint configuration
file.  This would be my preferred way to create REST services going
forward.
But I don't know how to set the JAXB Marshaller property in the blueprint
file.  I tried this:

<bean id="greetingBean" class="com.cn.dsa.service.GreetingServiceImpl"/>
     
     <jaxrs:server id="greetingService" address="/greeting">
        <jaxrs:serviceBeans>
           <ref component-id="greetingBean" />
        </jaxrs:serviceBeans>

        <jaxrs:dataBinding>
          <bean class="org.apache.cxf.jaxb.JAXBDataBinding">
            <property name="marshallerProperties">
              <map>
                <entry>
                  <key><value>com.sun.xml.bind.xmlDeclaration</value></key>
                  <value type="boolean">true</value>
                </entry>
              </map>
            </property>
          </bean>
        </jaxrs:dataBinding>
        
     </jaxrs:server>

But I get this error:
org.apache.cxf.interceptor.Fault: Unmarshalling Error:
javax.xml.transform.dom.DOMSource is not known to this context
        at 
org.apache.cxf.jaxrs.provider.DataBindingProvider.readFrom(DataBindingProvi
der.java:76)
        at 
org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.
java:1189)
        at 
org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1
137)
        at 
org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:686)
        at 
org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:646
)
        at 
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInI
nterceptor.java:237)
        at 
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInIn
terceptor.java:98)
        at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai
n.java:271)
        at 
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationO
bserver.java:121)
        at 
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDe
stination.java:239)
        at 
org.apache.cxf.transport.servlet.ServletController.invokeDestination(Servle
tController.java:218)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController
.java:163)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController
.java:137)
        at 
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringSer
vlet.java:158)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(Abstract
HTTPServlet.java:243)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPSer
vlet.java:163)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
. . .




-- 
Miles Poindexter
Data & Service Architecture
Condé Nast
ph: 212-790-6692
mobile: 347-967-8944
fax: 212-790-1891
[email protected]
<applewebdata://6D7C2D39-4D16-42A7-8457-9A8FCE0ED464/miles_poindexter@conde
nast.com>





On 4/24/13 5:07 PM, "Sergey Beryozkin" <[email protected]> wrote:

>Hi
>On 24/04/13 20:29, Poindexter, Miles wrote:
>> Hello to everyone on the list.
>> I'm a new developer using ServiceMix and building some REST services
>>using CXF and JAX-RS 2.0 which uses javax.xml.ws.Provider.
>>
>FYI, in this case your are working with JAX-WS API,
>In this case you should probably configure JAXB DataBinding in your
>jaxws endpoint and set up a JAXB Marshaller property
>(com.sun.xml.bind.xmlDeclaration) which will instruct JAXB to retain the
>declaration
>
>You can see an example at
>http://cxf.apache.org/docs/jaxb.html
>
>Sergey
>
>
>> They work great.
>> The only glitch is now one client wants to see the XML declaration in
>>the response XML.
>> They are claiming the XML is not valid without the declaration.
>> Even though they are wrong, and its valid, I am still curious if I can
>>somehow get the declaration to show up?
>>
>> To test this, I built a stripped down service that looks like this:
>>
>> @WebServiceProvider()
>> @ServiceMode(value = Service.Mode.PAYLOAD)
>> public class RestSourcePayloadProvider implements Provider<DOMSource>  {
>>
>>    public DOMSource invoke(DOMSource request) {
>>          if (httpMethod.equalsIgnoreCase("POST")) {
>>              if (path.equals("/cxf/test")) {
>>                  return testResponse();
>>              }
>>          }
>>    }
>>
>> private DOMSource testResponse() {
>>          DocumentBuilderFactory factory;
>>          DocumentBuilder builder;
>>          Document document = null;
>>          DOMSource response = null;
>>
>>          try {
>>              factory = DocumentBuilderFactory.newInstance();
>>              //factory.setValidating(true);
>>              builder = factory.newDocumentBuilder();
>>              InputStream testResponse =
>>getClass().getResourceAsStream("/files/test.xml");
>>
>>              document = builder.parse(testResponse);
>>              response = new DOMSource(document);
>>          } catch (Exception e) {
>>              e.printStackTrace();
>>          }
>>          return response;
>>      }
>> }
>>
>> This service grabs an xml file that has the XML declaration, creates
>>the Document from it, and then the DOMSource from the Document and
>>returns the DOMSource.
>>
>> test.xml  file:
>> [code]
>> <?xml version="1.0" encoding="utf-8" ?>
>> <Test>
>>    <name>John</name>
>>    <id>123456</id>
>> </Test>
>>
>> But the service returns only:
>> <Test>
>>    <name>John</name>
>>    <id>123456</id>
>> </Test>
>>
>> What is the recommended way in the current version of ServiceMix to get
>>this response to NOT strip out the XML declaration?
>>
>> miles
>> --
>> Miles Poindexter
>> Data&  Service Architecture
>> Condé Nast
>> ph: 212-790-6692
>> mobile: 347-967-8944
>> fax: 212-790-1891
>> 
>>[email protected]<applewebdata://6D7C2D39-4D16-42A7-8457-9A8
>>FCE0ED464/[email protected]>
>>
>>
>>
>
>
>-- 
>Sergey Beryozkin
>
>Talend Community Coders
>http://coders.talend.com/
>
>Blog: http://sberyozkin.blogspot.com


Reply via email to