আমি বুঝতে পারছি আপনার সমস্যা নিচে boils কিভাবে জাভা থেকে একটি সোপ (Jax-ডব্লুএস) ওয়েব পরিষেবা কল এবং তার ফিরে বস্তুর পেতে । সেক্ষেত্রে আপনার দুটি সম্ভাব্য পন্থা রয়েছে:
- জাভা ক্লাসগুলি তৈরি করে
wsimport
তাদের ব্যবহার করুন; অথবা
- একটি এসওএপি ক্লায়েন্ট তৈরি করুন:
- এক্সএমএলে পরিষেবাটির পরামিতিগুলি সিরিয়াল করে;
- এইচটিটিপি ম্যানিপুলেশন মাধ্যমে ওয়েব পদ্ধতি কল; এবং
- প্রত্যাবর্তনকারী এক্সএমএল প্রতিক্রিয়াটিকে কোনও বস্তুর মধ্যে আবার পার্স করুন।
প্রথম পদ্ধতির সম্পর্কে (ব্যবহার করে wsimport
):
আমি দেখতে পাচ্ছি যে আপনার কাছে ইতিমধ্যে পরিষেবাদিগুলির (সত্তা বা অন্যান্য) ব্যবসায়িক ক্লাস রয়েছে, এবং এটি একটি সত্য যে wsimport
ক্লাসগুলির সম্পূর্ণ নতুন সেট তৈরি করা হয় (এটি আপনার ইতিমধ্যে ক্লাসগুলির কোনওরকম নকল)।
আমি ভয় পাচ্ছি, যদিও এই পরিস্থিতিতে আপনি কেবলমাত্র:
wsimport
উত্পন্ন কোডটিকে এটিকে আপনার ব্যবসায়িক ক্লাসগুলি ব্যবহার করার জন্য অভিযোজিত (সম্পাদনা) করুন (এটি কঠিন এবং কোনওভাবেই এটির পক্ষে মূল্যহীন নয় - ডাব্লুএসডিএল পরিবর্তিত হওয়ার সাথে সাথে মনে রাখবেন, আপনাকে কোডটি পুনরায় জেনারেট করতে হবে এবং পুনরায় তৈরি করতে হবে); অথবা
wsimport
উত্পন্ন ক্লাসগুলি ছেড়ে দিন এবং ব্যবহার করুন । (এই সমাধানে, আপনার ব্যবসায়ের কোডটি অন্য স্থাপত্য স্তর থেকে পরিষেবা হিসাবে উত্পন্ন ক্লাসগুলি "ব্যবহার" করতে পারে))
দ্বিতীয় পদ্ধতির সম্পর্কে (আপনার কাস্টম এসওএপি ক্লায়েন্ট তৈরি করুন):
দ্বিতীয় পদ্ধতির প্রয়োগ করতে, আপনাকে এগুলি করতে হবে:
- কল করুন:
- কল করার জন্য SAAJ (জাভা জন্য সংযুক্তি এপিআই সহ এসওপি) ব্যবহার করুন (নীচে দেখুন, এটি জাভা এসই 1.6 বা তারপরে প্রেরণ করা হয়েছে) কলগুলি করতে; অথবা
- আপনি এটি
java.net.HttpUrlconnection
(এবং কিছু java.io
পরিচালনা) এর মাধ্যমেও করতে পারেন ।
- এক্সএমএল থেকে অবজেক্টগুলিকে এতে এবং পিছনে ঘুরিয়ে দিন:
- এক্সএমএলকে অবজেক্ট / ইন / থেকে সিরিয়ালাইজ করতে / ডিজিটালাইজ করতে JAXB এর মতো একটি OXM (XML ম্যাপিংয়ের জন্য অবজেক্ট) ফ্রেমওয়ার্ক ব্যবহার করুন
- অথবা, যদি আপনাকে অবশ্যই XML টি ম্যানুয়ালি তৈরি / বিশ্লেষণ করে (যদি প্রাপ্ত বস্তুটি প্রেরিতটির থেকে সামান্য কিছুটা পৃথক হয় তবে এটি সেরা সমাধান হতে পারে)।
ক্লাসিক ব্যবহার করে একটি এসওএপি ক্লায়েন্ট তৈরি java.net.HttpUrlConnection
করা তেমন শক্ত নয় (তবে এটি সাধারণও নয়) এবং আপনি এই লিঙ্কটিতে একটি খুব ভাল সূচনা কোড খুঁজে পেতে পারেন ।
আমি আপনাকে SAAJ কাঠামোটি ব্যবহার করার পরামর্শ দিচ্ছি:
জাভা (SAAJ) এর জন্য সংযুক্তিগুলির সাথে সংযুক্ত এসওএপি মূলত এসওএপি অনুরোধ / প্রতিক্রিয়া বার্তাগুলির সাথে সরাসরি ডিল করার জন্য ব্যবহৃত হয় যা কোনও ওয়েব সার্ভিস এপিআইতে পর্দার আড়ালে ঘটে। এটি বিকাশকারীদের জ্যাক-ডাব্লুএস ব্যবহার না করে সরাসরি সাবান বার্তা প্রেরণ এবং গ্রহণের অনুমতি দেয়।
SAAJ ব্যবহার করে একটি সোপ ওয়েব পরিষেবা কলের একটি কার্যকারী উদাহরণ (এটি চালান!) দেখুন। এটি এই ওয়েব পরিষেবাটিকে কল করে ।
import javax.xml.soap.*;
public class SOAPClientSAAJ {
// SAAJ - SOAP Client Testing
public static void main(String args[]) {
/*
The example below requests from the Web Service at:
https://www.w3schools.com/xml/tempconvert.asmx?op=CelsiusToFahrenheit
To call other WS, change the parameters below, which are:
- the SOAP Endpoint URL (that is, where the service is responding from)
- the SOAP Action
Also change the contents of the method createSoapEnvelope() in this class. It constructs
the inner part of the SOAP envelope that is actually sent.
*/
String soapEndpointUrl = "https://www.w3schools.com/xml/tempconvert.asmx";
String soapAction = "https://www.w3schools.com/xml/CelsiusToFahrenheit";
callSoapWebService(soapEndpointUrl, soapAction);
}
private static void createSoapEnvelope(SOAPMessage soapMessage) throws SOAPException {
SOAPPart soapPart = soapMessage.getSOAPPart();
String myNamespace = "myNamespace";
String myNamespaceURI = "https://www.w3schools.com/xml/";
// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration(myNamespace, myNamespaceURI);
/*
Constructed SOAP Request Message:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myNamespace="https://www.w3schools.com/xml/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<myNamespace:CelsiusToFahrenheit>
<myNamespace:Celsius>100</myNamespace:Celsius>
</myNamespace:CelsiusToFahrenheit>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*/
// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("CelsiusToFahrenheit", myNamespace);
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("Celsius", myNamespace);
soapBodyElem1.addTextNode("100");
}
private static void callSoapWebService(String soapEndpointUrl, String soapAction) {
try {
// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Send SOAP Message to SOAP Server
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(soapAction), soapEndpointUrl);
// Print the SOAP Response
System.out.println("Response SOAP Message:");
soapResponse.writeTo(System.out);
System.out.println();
soapConnection.close();
} catch (Exception e) {
System.err.println("\nError occurred while sending SOAP Request to Server!\nMake sure you have the correct endpoint URL and SOAPAction!\n");
e.printStackTrace();
}
}
private static SOAPMessage createSOAPRequest(String soapAction) throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
createSoapEnvelope(soapMessage);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", soapAction);
soapMessage.saveChanges();
/* Print the request message, just for debugging purposes */
System.out.println("Request SOAP Message:");
soapMessage.writeTo(System.out);
System.out.println("\n");
return soapMessage;
}
}
সিরিয়ালাইজেশন / ডিসরিয়ালাইজেশনের জন্য জ্যাকএক্সবি ব্যবহার সম্পর্কে এটি সম্পর্কে তথ্য পাওয়া খুব সহজ। আপনি এখানে শুরু করতে পারেন: http://www.mkyong.com/java/jaxb-hello-world-example/ ।