রুবির সাথে এসওএপি ব্যবহারের সর্বোত্তম উপায় কী?


91

আমার এক ক্লায়েন্ট আমাকে তৃতীয় পক্ষের এপিআইকে তাদের রেল অ্যাপগুলিতে সংহত করতে বলেছে। একমাত্র সমস্যা হ'ল এপিআই এসওএপি ব্যবহার করে। রুবি মূলত রেস্টের পক্ষে এসওএপি ফেলেছে। তারা একটি জাভা অ্যাডাপ্টার সরবরাহ করে যা স্পষ্টতই জাভা-রুবি ব্রিজটির সাথে কাজ করে তবে আমরা যদি সম্ভব হয় তবে এটি রুবিতে রাখতে চাই। আমি সাবান 4 আর এ দেখেছি তবে মনে হচ্ছে এর কিছুটা খারাপ খ্যাতি আছে।

তাহলে কোনও রেলস অ্যাপে এসওএপি কলগুলিকে সংহত করার সর্বোত্তম উপায় কী?

উত্তর:


36

আমরা soap/wsdlDriverক্লাসে অন্তর্নির্মিত ব্যবহার করেছি , যা আসলে এসওএপি 4 আর। এটি কুকুর ধীর, তবে সত্যিই সহজ। রত্ন / ইত্যাদি থেকে আপনি যে এসওএপি 4 আর পান সেটি হ'ল একই জিনিসটির একটি আপডেট সংস্করণ।

উদাহরণ কোড:

require 'soap/wsdlDriver'

client = SOAP::WSDLDriverFactory.new( 'http://example.com/service.wsdl' ).create_rpc_driver
result = client.doStuff();

এটা সম্বন্ধে


37
এটি "কুকুর ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেড়ে উঠছে। স্থায়ীভাবে প্রক্সি তৈরি করতে wsdl2ruby ব্যবহার করে আপনি এই ব্যথাটি এড়াতে পারেন এবং তারপরে প্রাক-উত্পন্ন উত্সাহীন কল করতে পারেন।
স্টিভ ওয়েট

7
আমরা পারতাম, তবে এর অর্থ wsdl2ruby ইনস্টল করা এবং আরও অনেক কিছু on কখনও কখনও কুকুর স্লো ভাল থাকে :-)
অরিওন এডওয়ার্ডস

4
যদি আপনাকে সাভনের জন্য প্রক্সি ক্লাস তৈরি করতে হয়, আপনি পদ্ধতির নামগুলি তৈরি করতে এবং একটি কাস্টম ডাব্লুএসডিএল পার্সার তৈরি না করে :) সাপ পদ্ধতিতে অন- ফ্লাইয়ে সাবান পদ্ধতি তৈরির জন্য ক্র্রেডারের পদ্ধতি অনুসরণ করতে পারেন :)। মেমোরিতে সমস্ত পদ্ধতি সঞ্চয় করার পরিবর্তে আপনি ফাইলটিতে লিখতে পারেন, বিশেষত আপনার যদি টন থাকে।
দেজন

4
04/2015: সোপ 4 আর মারা গেছে, ওয়েবসাইট ডাউন। মনে হয় এই মুহূর্তে সাভন সাধারণ পছন্দ।
পুস

আমি এই স্পেসটি ঘুরে দেখছি এবং সাবান 4-এনজি আবিষ্কার করেছি, এটি এখনও রক্ষণাবেক্ষণ করা হচ্ছে github.com/rubyjedi/soap4r
ঘোটি

170

আমি রুবিকে যতটা সম্ভব সহজ মাধ্যমে এসওএপি ওয়েবসার্চগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য সাভন তৈরি করেছি built
আমি আপনাকে এটি পরীক্ষা করে দেখুন।


4
সাবানের জন্য +1, সাবান 4 আর মারতে নয় - তবে এটির সাথে আমার সত্যিই খারাপ অভিজ্ঞতা ছিল। ভাল ডকুমেন্টেশন অভাব এবং খুব জটিল।
কনুং

4
সুন্দর! রুবিতে এসওএপি বিশ্বের উন্নতি হয়েছে গতবারের থেকে আমাকে এটি করতে সোপ 4 আর ব্যবহার করতে হয়েছিল (~ 18 মাস আগে)
পাগল

আপনারা কেউ দয়া করে সাওন ব্যবহার করে সাবের এপিআইকে আঘাত করতে আমাকে সহায়তা করতে পারেন? আমার একটি কোড রয়েছে যা সাওন আমাকে এসওএপি এর ডাব্লুএসডিএল ব্যবহার করে পদ্ধতিগুলি সরবরাহ করে তবে আমি এক্সএমএল ফর্ম্যাটে সাওন ব্যবহার করে অনুরোধটি পাঠাতে পারছি না।
জয় কুমার রাজপুত


5

আমি সাওনকেও সুপারিশ করি । আমি সোপ 4 আর এর সাথে ডিল করার চেষ্টা করে অনেক ঘন্টা ব্যয় করেছি, ফলাফল ছাড়াই। কার্যকারিতার বড় অভাব, কোনও ডক নেই।

আমার জন্য সাওন উত্তর।



3

স্যাভন ব্যবহার করে মাত্র 3 ঘন্টার মধ্যে আমার স্টাফ কাজ করেছে।

সাভনের হোমপেজে প্রারম্ভিক ডকুমেন্টেশনগুলি অনুসরণ করা সত্যিই সহজ ছিল - এবং আমি যা দেখছিলাম তা আসলে মিলিয়েছে (সবসময় এটি হয় না)


2

থেকে কেন্ট Sibilev Datanoise এছাড়াও পাগল 2.1 (এবং উপরে) এর পাগল ActionWebService গ্রন্থাগার বৈশিষ্ট্যসমূহ নিয়ে আসা হয়েছিল। এটি আপনাকে আপনার নিজের রুবি ভিত্তিক এসওএপি পরিষেবাগুলি প্রকাশ করতে দেয়। এমনকি তার কাছে একটি স্ক্যাফোল্ড / টেস্ট মোড রয়েছে যা আপনাকে ব্রাউজার ব্যবহার করে আপনার পরিষেবাগুলি পরীক্ষা করতে দেয়।


2

যখন আমি আমার গ্রহণযোগ্যতা পরীক্ষার জন্য একটি নকল এসওএপি সার্ভার তৈরি করতে হয়েছিল তখন আমি রুবিতে এসওএপি ব্যবহার করেছি। আমি জানি না যে সমস্যাটি দেখার সবচেয়ে ভাল উপায় এটি ছিল তবে এটি আমার পক্ষে কাজ করেছিল।

আমি সার্ভারের জন্য সিনাত্রার রত্ন (আমি এখানে সিনট্রা সহ মজাদার শেষের পয়েন্টগুলি তৈরি করার বিষয়ে লিখেছি ) এবং এক্সএমএল স্টাফের জন্য নোকোগিরি ব্যবহার করেছি (এসওএপি এক্সএমএল নিয়ে কাজ করছে)।

সুতরাং, শুরুতে আমি দুটি ফাইল তৈরি করেছি (যেমন। ইন config.rb আমি wsdl ফাইল করা, কিন্তু একটি স্ট্রিং হিসেবে থাকে।

@@wsdl = '<wsdl:definitions name="StockQuote"
         targetNamespace="http://example.com/stockquote.wsdl"
         xmlns:tns="http://example.com/stockquote.wsdl"
         xmlns:xsd1="http://example.com/stockquote.xsd"
         xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
         xmlns="http://schemas.xmlsoap.org/wsdl/">
         .......
      </wsdl:definitions>'

ইন responses.rb আমি প্রতিক্রিয়া যে সাবান সার্ভার বিভিন্ন পরিস্থিতিতে জন্য ফিরে হবে করা নমুনা আছে।

@@login_failure = "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <LoginResponse xmlns="http://tempuri.org/">
            <LoginResult xmlns:a="http://schemas.datacontract.org/2004/07/WEBMethodsObjects" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:Error>Invalid username and password</a:Error>
                <a:ObjectInformation i:nil="true"/>
                <a:Response>false</a:Response>
            </LoginResult>
        </LoginResponse>
    </s:Body>
</s:Envelope>"

সুতরাং এখন আমি আপনাকে প্রকৃতপক্ষে সার্ভারটি কীভাবে তৈরি করেছি তা আপনাকে দেখাতে দিন।

require 'sinatra'
require 'json'
require 'nokogiri'
require_relative 'config/config.rb'
require_relative 'config/responses.rb'

after do
# cors
headers({
    "Access-Control-Allow-Origin" => "*",
    "Access-Control-Allow-Methods" => "POST",
    "Access-Control-Allow-Headers" => "content-type",
})

# json
content_type :json
end

#when accessing the /HaWebMethods route the server will return either the WSDL file, either and XSD (I don't know exactly how to explain this but it is a WSDL dependency)
get "/HAWebMethods/" do
  case request.query_string
    when 'xsd=xsd0'
        status 200
        body = @@xsd0
    when 'wsdl'
        status 200
        body = @@wsdl
  end
end

post '/HAWebMethods/soap' do
request_payload = request.body.read
request_payload = Nokogiri::XML request_payload
request_payload.remove_namespaces!

if request_payload.css('Body').text != ''
    if request_payload.css('Login').text != ''
        if request_payload.css('email').text == some username && request_payload.css('password').text == some password
            status 200
            body = @@login_success
        else
            status 200
            body = @@login_failure
        end
    end
end
end

আমি আশা করি আপনি এটি সহায়ক পাবেন!


1

আমার একই সমস্যা ছিল, স্যাভনে চলে গেলাম এবং তারপরে এটি কেবল একটি উন্মুক্ত ডাব্লুএসডিএলে পরীক্ষা করে দেখলাম (আমি http://www.webservicex.net/geoipservice.asmx?WSDL ব্যবহার করেছি ) এবং এখন পর্যন্ত খুব ভাল!

https://github.com/savonrb/savon


0

আমি এসওএপি পদ্ধতিতে কল করার জন্য নীচের মতো HTTP কল ব্যবহার করেছি,

require 'net/http'

class MyHelper
  def initialize(server, port, username, password)
    @server = server
    @port = port
    @username = username
    @password = password

    puts "Initialised My Helper using #{@server}:#{@port} username=#{@username}"
  end



  def post_job(job_name)

    puts "Posting job #{job_name} to update order service"

    job_xml ="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"http://test.com/Test/CreateUpdateOrders/1.0\">
    <soapenv:Header/>
    <soapenv:Body>
       <ns:CreateTestUpdateOrdersReq>
          <ContractGroup>ITE2</ContractGroup>
          <ProductID>topo</ProductID>
          <PublicationReference>#{job_name}</PublicationReference>
       </ns:CreateTestUpdateOrdersReq>
    </soapenv:Body>
 </soapenv:Envelope>"

    @http = Net::HTTP.new(@server, @port)
    puts "server: " + @server  + "port  : " + @port
    request = Net::HTTP::Post.new(('/XISOAPAdapter/MessageServlet?/Test/CreateUpdateOrders/1.0'), initheader = {'Content-Type' => 'text/xml'})
    request.basic_auth(@username, @password)
    request.body = job_xml
    response = @http.request(request)

    puts "request was made to server " + @server

    validate_response(response, "post_job_to_pega_updateorder job", '200')

  end



  private 

  def validate_response(response, operation, required_code)
    if response.code != required_code
      raise "#{operation} operation failed. Response was [#{response.inspect} #{response.to_hash.inspect} #{response.body}]"
    end
  end
end

/*
test = MyHelper.new("mysvr.test.test.com","8102","myusername","mypassword")
test.post_job("test_201601281419")
*/

আশা করি এটা সাহায্য করবে. চিয়ার্স

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.