Morgan,

This is to do with how you print the XmlBeans object

>From http://xmlbeans.apache.org/docs/2.0.0/reference/index.html

" Reading and writing fragments. When reading or writing the contents of a
whole XML document, the standard XML reprentation for a document is used.
However, there is no standard concrete XML representation for "just the
contents" of an interior element or attribute. So when one is needed, the
tag <xml-fragment> is used to wrap the contents. This tag is used can also
be used to load just the contents for an XmlObject document fragment of
arbitrary type. If you wish to save out the XmlObject's container element
along with its contents, use setSaveOuter() ."

The XML is in fact correct, but just the way you are logging it I believe.

Cheers

Tim



-----Original Message-----
From: Morten Wilken [mailto:[EMAIL PROTECTED] 
Sent: Thursday, May 11, 2006 1:12 PM
To: [email protected]
Subject: [xfire-user] Xmlbeans problem

Hello,
I have set up xfire 1.1RC1 in a webapp using spring like this:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
        "http://www.springframework.org/dtd/spring-beans.dtd";>
<beans>
        <bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
                <property name="urlMap">
                        <map>
                                <entry key="/TestService">
                                        <ref bean="test" />
                                </entry>
                        </map>
                </property>
        </bean>

        <!-- Declare a parent bean with all properties common to both
services -->
        <bean id="test"
class="org.codehaus.xfire.spring.remoting.XFireExporter">
                <property name="serviceFactory"
ref="xfire.xmlbeansServiceFactory" />
                <property name="xfire" ref="xfire" />
                <property name="style" value="rpc" />
                <property name="serviceBean" ref="testBean" />
                <property name="serviceInterface"
value="dk.bec.test.TestXFireService" />
                <property name="namespace" value="PITrans30Ver6" />
        </bean>
        <bean id="testBean" class="dk.bec.test.TestXFireServiceImpl" />
</beans>

With the corresponding Service code:

public class TestXFireServiceImpl implements TestXFireService {

        public AnmodOmDataDocument test(AnmodOmDataDocument document) {
                System.out.println(document.xmlText());
                return document;
        }
}

And this client:

public class TextXFireClient {

        public static void main(String[] args) {
                System.setProperty(
                        "javax.xml.stream.XMLInputFactory",
                        "com.ctc.wstx.stax.WstxInputFactory");
                System.setProperty(
                        "javax.xml.stream.XMLOutputFactory",
                        "com.ctc.wstx.stax.WstxOutputFactory");
                System.setProperty(
                        "javax.xml.stream.XMLEventFactory",
                        "com.ctc.wstx.stax.WstxEventFactory");

                try {
                        XmlBeansServiceFactory factory = new
XmlBeansServiceFactory();
                        factory.setStyle("rpc");
                        Service service =
                                factory.create(
                                        TestXFireService.class,
                                        "TestService",
                                        "PITrans30Ver6",
                                        null);
        
service.setProperty(XmlBeansType.XMLBEANS_NAMESPACE_HACK, "true");
                        System.out.println(service);
                        TestXFireService testService =
                                (TestXFireService) new
XFireProxyFactory().create(
                                        service,
        
"http://localhost:9080/XfireTest/TestService";);

                        AnmodOmDataDocument doc =
                                ((AnmodOmDataDocument)
AnmodOmDataDocument
                                        .Factory
                                        .parse(
        
TextXFireClient.class.getResourceAsStream(
        
"PITrans30Ver6.xml")));
                        AnmodOmDataDocument doc2 =
testService.test(doc);
                        System.out.println(doc);
                        System.out.println(doc2);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

Everything works fine except that when i recieve an XmlBeans object and
print it, the xml is surrounded by <xml-fragment> tags... It looks like
xfire messes up the namespace attributes of my xml:

This is the XML i send
<p:AnmodOmData xmlns:p="PITrans30Ver6"
xmlns:xsi="http:/www.w3.org/2001/XMLSchema-instance">
  <Header>
    <VersionsNr>6</VersionsNr>
    <LeveranceID/>
    <TransaktionstypeNr>30</TransaktionstypeNr>
    <LeveranceTidspunkt>2001-12-31T12:00:00</LeveranceTidspunkt>
    <CprNr>1710743017</CprNr>
  </Header>
  <Anmoder>
    <AnmoderID>1</AnmoderID>
    <AnmoderKontakt>[EMAIL PROTECTED]</AnmoderKontakt>
    <Valutakode>dkk</Valutakode>
  </Anmoder>
</p:AnmodOmData>

This is the xml i recieve on the server.
<xml-fragment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:p="PITrans30Ver6"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
  <p:AnmodOmData xmlns:xsi="http:/www.w3.org/2001/XMLSchema-instance">
    <Header xmlns="PITrans30Ver6">
      <VersionsNr>6</VersionsNr>
      <LeveranceID/>
      <TransaktionstypeNr>30</TransaktionstypeNr>
      <LeveranceTidspunkt>2001-12-31T12:00:00</LeveranceTidspunkt>
      <CprNr>1710743017</CprNr>
    </Header>
    <Anmoder xmlns="PITrans30Ver6">
      <AnmoderID>1</AnmoderID>
      <AnmoderKontakt>[EMAIL PROTECTED]</AnmoderKontakt>
      <Valutakode>dkk</Valutakode>
    </Anmoder>
  </p:AnmodOmData>
</xml-fragment>

I am totally clueless as to why this happends and i hope somebody can
help me.

Sincerely
Morten Wilken


Reply via email to