java हरण JAXB: सभी तत्वों के लिए नेमस्पेस उपसर्ग की आवश्यकता है




उर्दू के उपसर्ग (5)

एक और तरीका यह है कि मार्शलर को हमेशा एक निश्चित उपसर्ग का उपयोग करने के लिए कहें

marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NamespacePrefixMapper() {
             @Override
            public String getPreferredPrefix(String arg0, String arg1, boolean arg2) {
                return "ns1";
            }
        });'

मैं webservice कॉल का उपयोग करने के लिए स्प्रिंग वेबसाइसेमेप्लेट का उपयोग कर रहा हूं जो जेएएएसएबी का उपयोग एक्सएमएल बनाने के लिए करता है। मेरी आवश्यकता को SOAP अनुरोध में एक नेमस्पेस उपसर्ग (केवल एक नेमस्पेस है) के लिए सभी तत्वों (रूट सहित) की आवश्यकता है।

पूर्व:

<ns1:Login xmlns:ns1="www.example.com/a">
    <ns1:username>abc</ns1:username>
    <ns1:password>abc</ns1:password>
</ns1:Login>

लेकिन मुझे मिल रहा है

<Login xmlns="www.example.com/a">
    <username>abc<username>
    <password>abc<password>
</Login>

एक्सएसडी:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="www.example.com/a"   xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ilreq="www.example.com/a" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:complexType name="Login">
    <xs:sequence>
        <xs:element name="username" type="xs:string"/>
        <xs:element name="password" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

एक्सएसडी से उत्पन्न जावा क्लास

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Login", propOrder = {
    "username",
    "password"
})

@XmlRootElement
public class Login {

@XmlElement(required = true)
protected String username;
@XmlElement(required = true)
protected String password;
......
}

package-info.java

@javax.xml.bind.annotation.XmlSchema(
    namespace = "www.example.com/a",
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package authenticator.beans.login;

रूट के साथ सभी तत्वों के लिए नेमस्पेस उपसर्ग के साथ अनुरोध XML उत्पन्न करने के तरीके जानना चाहते हैं।


जोड़कर हल

@XmlSchema(
    namespace = "http://www.example.com/a",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns = {
        @XmlNs(prefix="ns1", namespaceURI="http://www.example.com/a")
    }
)  

package authenticator.beans.login;
import javax.xml.bind.annotation.*;

पैकेज- info.java में

जेक्सब-नामस्थानों की मदद ली गई- लापता : ब्लेज डॉफ़ोन द्वारा दिए गए उत्तर


इस समस्या का सामना करना पड़ रहा था, मेरे पैकेज में पैकेज-जानकारी जोड़कर हल

और इसमें निम्न कोड:

@XmlSchema(
    namespace = "http://www.w3schools.com/xml/",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns = {
        @XmlNs(prefix="", namespaceURI="http://www.w3schools.com/xml/")
    }
)  
package com.gateway.ws.outbound.bean;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

एमएसके,

क्या आपने इस तरह से अपने सदस्य चर को एक नेमस्पेस घोषणा सेट करने की कोशिश की है? :

@XmlElement(required = true, namespace = "http://example.com/a")
protected String username;

@XmlElement(required = true, namespace = "http://example.com/a")
protected String password;

हमारी परियोजना के लिए, यह नाम स्थान समस्या हल कर ली है हमें नामस्पेसफ्रिक्फिक्स मैपर बनाने की भी ज़रूरत थी।


marshaller.setProperty केवल सन से जेएक्स-बी मार्शलर पर काम करता है। प्रश्न SpringSource से जेएक्स-बी SpringSource संबंध में था, जो SpringSource समर्थन नहीं करता है।







spring-ws