का उपयोग कर वैश्विक बाध्यकारी डबल टाइप रूपांतरण मेरे पास एक तत्व xsd: double के रूप में परिभाषित किया गया है। यदि मैं एक मूल्य को कोशिश करता हूं और तत्व में 285 कहता हूं और फिर मैं इसे मार्शल करता हूं तो मुझे 285.0 का आउटपुट मिलता है ... यह ठीक है। हालांकि, अगर मैं 285292746 कहने का मूल्य डालता हूं, तो मुझे 2.85292746E8 का आउटपुट मिलता है मैं मार्शल मुझे कुछ पसंद है ताकि डबल आउटपुट दशमलव के साथ वैज्ञानिक नोटेशन में परिवर्तित न हो? असल में मैं 285292746 या 2852292746.0000000जैक्सबी: एक्सएमएलएडाप्टर
java.lang.Double.toString() कुछ मानों के लिए "कम्प्यूटरीकृत वैज्ञानिक नोटेशन" का उपयोग करता है जो xml के लिए आइस्यू उत्पन्न करता है।
मुझे पता है कि दिए गए मूल्य का दोहरा प्रतिनिधित्व ठीक है। लेकिन तथ्य यह है कि मूल्य घातीय प्रारूप में था, जिस प्रणाली पर मैं काम कर रहा हूं वह मेरा एक्सएमएल स्वीकार कर रहा है लेकिन यह नहीं जानता कि घातीय मूल्य के साथ क्या करना है और इससे मेरा प्रोग्राम सही ढंग से काम नहीं कर सकता है। Xsd बदलना: डब्ल्यूएसडीएल या सर्वर में डबल टाइप मेरे लिए व्यवहार्य नहीं है। मैं ग्राहक पक्ष पर काम कर रहा हूं।
मैं जैक्सब में आया: xsd के लिए बाध्यकारी: डबल प्रकार। मुझे अभी भी गैर-एक्सपोनेंट प्रारूप में मूल्यों को डबल मान भेजने के लिए समस्या को ठीक करने में कठिनाई हो रही है।
package com.logger.client
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.DatatypeConverter;
public class JaxbDoubleSerializer extends XmlAdapter<String, Double>
{
public Double unmarshal(String value) {
return ((double)javax.xml.bind.DatatypeConverter.parseDouble(value));
}
public String marshal(Double value) {
if (value == null) {
return null;
}
return (javax.xml.bind.DatatypeConverter.printDouble((double)(double)value));
}
}
मुझे डबलसेरियलाइज़र का उपयोग करने में मदद की ज़रूरत है ताकि मैं एक्सपोनेंट के बिना मूल्यों को पार कर सकूं। मैंने अपनी कक्षा MyLogClient.java में xmlAdapter एनोटेशन का उपयोग करने का प्रयास किया। मुझे यह जानने की जरूरत है कि मैं इस स्थिति को कैसे हल कर सकता हूं।
package com.logger.client
import javax.xml.ws.BindingProvider;
import javax.xml.bind.JAXBElement;import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
public class MyLogClient
{
//Private member fields
/** Object factory used to create user-and-role specific objects. */
private static final ObjectFactory _of = new ObjectFactory();
@XmlJavaTypeAdapter(JaxbDoubleSerializer.class)
public JAXBElement<Double> msgFileId;
@XmlJavaTypeAdapter(JaxbDoubleSerializer.class)
public Double dNumber;
public final void createEntry;
(
final String userName,
final String time,
final String logMsgStringId,
final Params logMsgParamsVal,
final Integer logMessageFieldID
)
throws JAXBException
{
JAXBElement<String> username = _of.createParamsParam(userName);
JAXBElement<String> strTime = _of.createLogRequestTime(time);
// Build the LogRequest request.
final LogRequest _LogRequest = _of.createLogRequest();
_LogRequest.setUserName(userName);
_LogRequest.setTime(strTime);
//Following is the main problem
int nMsgArgs = 285292746;
dNumber = Double.parseDouble(Integer.toString(nMsgArgs));
//After parsing double Value I get dNumber is now 2.85292746E8
//MsgFile Id is of Type JAXBElement<Double>
//CreateLogMessageIdentifier takes Double param
//So the main problem is here..the value of double field in soap request
//is being sent in exponential format. I need to send as I explained above
//285292746.
msgFileId = _of.createLogMessageIdentifier(dNumber);
JAXBElement<String> strIdVal = _of.createLogMessageFileId(logMsgStringId);
final LogMessage logMessage = _of.createLogMessage();
JAXBElement<Params> _logMsgParams =_of.createLogMessageParams(logMsgParamsVal);
//Following is where I am trying to use marshall for double type.
JAXBContext context = JAXBContext.newInstance("package com.logger.client ");
context.createMarshaller().marshal(msgFileId, System.out);
logMessage.setIdentifier(msgFileId); //Method takes JAXBElement<Double>
logMessage.setFileId(strIdVal);
logMessage.setParams(_logMsgParams);
JAXBElement<LogMessage> logMsgValue = _of.createLogRequestLogMessage(logMessage);
_LogRequest.setLogMessage(logMsgValue);
// Set the log entry
port.log(_LogRequest); //Request is sent to server.
}
डबल्यूएसडीएल XSD: प्रकार घोषणा नीचे है: -
<xsd:complexType name="LogMessage">
<xsd:sequence>
<xsd:element name="fileId" type="xsd:string" minOccurs="0" nillable="true" />
<xsd:element name="identifier" type="xsd:double" minOccurs="0" nillable="true" />
<xsd:element name="params" type="tns:Params" minOccurs="0" nillable="true" />
</xsd:sequence>
</xsd:complexType>
पहचानकर्ता क्षेत्र के लिए उत्पादन है: -
<identifier> 2.85292746E8</indentifier>
Whereas I want to send as. Because system does accept/recognize following types.
<identifier> 285292746</indentifier>
or
<identifier> 285292746.00000000</indentifier>
क्या आप कुछ विशिष्ट उदाहरण देंगे? क्या आपको लगता है कि एक्सएमएल एडाप्टर विकल्प ठीक है। मैंने अपने उदाहरण JAxDouble Serialzer में ऊपर दिखाए गए अनुसार उपयोग करने की कोशिश की लेकिन मुझे यकीन नहीं है कि मैं क्या खो रहा हूं। – user1029083