<< 20160722-debug-incoming-request-conversion-sandoz-xmlconv-bbmb-ch | Index | 20160719-fix-import-error-sandoz-xmlconv-ch-and-remove-flavor-bbmb-ch >>
z.B. propharma in sandoz.xmlconv.bbmb.ch
xmlconvd
parses transaction's xml and finds order request entries.
xmlconvd
saves this transaction in DB, even if bbmbd
does not work (also, records error "RuntimeError Bestellung OK, Eintrag in BBMB fehlgeschlagen")
bbmbd
works fine) xmlconvd
passes this transaction to bbmbd
(sandoz.bbmb.ch). This is passed through via DRb.
bbmbd
, 'BBMB::Util::Server#inject_order' is evaluated. Order object is saved.
bbmbd
sends a Notification as Email and creates (at 'BBMB::Util::Server#send_order') order file into chrooted directory (FTP)
RuntimeError Bestellung OK, Eintrag in BBMB fehlgeschlagen: RuntimeError can't commit empty order (druby://localhost:12004) /usr/local/lib/ruby/gems/2.3.0/gems/bbmb-2.0.8/lib/bbmb/model/order.rb:99:in `commit!' (druby://localhost:12004) /usr/local/lib/ruby/gems/2.3.0/gems/bbmb-2.0.8/lib/bbmb/persistence/odba/model/order.rb:44:in `commit!' (druby://localhost:12004) /usr/local/lib/ruby/gems/2.3.0/gems/bbmb-2.0.8/lib/bbmb/model/customer.rb:79:in `block in inject_order' (druby://localhost:12004) /usr/local/lib/ruby/gems/2.3.0/gems/bbmb-2.0.8/lib/bbmb/model/customer.rb:77:in `synchronize' (druby://localhost:12004) /usr/local/lib/ruby/gems/2.3.0/gems/bbmb-2.0.8/lib/bbmb/model/customer.rb:77:in `inject_order' (druby://localhost:12004) /usr/local/lib/ruby/gems/2.3.0/gems/bbmb-2.0.8/lib/bbmb/persistence/odba/model/customer.rb:32:in `inject_order' (druby://localhost:12004) /usr/local/lib/ruby/gems/2.3.0/gems/bbmb-2.0.8/lib/bbmb/util/server.rb:57:in `inject_order' (druby://localhost:12004) /usr/local/lib/ruby/2.3.0/drb/drb.rb:1624:in `perform_without_block' (druby://localhost:12004) /usr/local/lib/ruby/2.3.0/drb/drb.rb:1584:in `perform' (druby://localhost:12004) /usr/local/lib/ruby/2.3.0/drb/drb.rb:1657:in `block (2 levels) in main_loop' (druby://localhost:12004) /usr/local/lib/ruby/2.3.0/drb/drb.rb:1653:in `loop' (druby://localhost:12004) /usr/local/lib/ruby/2.3.0/drb/drb.rb:1653:in `block in main_loop' /var/www/sandoz.xmlconv.bbmb.ch/lib/postprocess/bbmb2.rb:38:in `block in inject' /var/www/sandoz.xmlconv.bbmb.ch/lib/postprocess/bbmb2.rb:16:in `each' /var/www/sandoz.xmlconv.bbmb.ch/lib/postprocess/bbmb2.rb:16:in `each_with_index' /var/www/sandoz.xmlconv.bbmb.ch/lib/postprocess/bbmb2.rb:16:in `inject' ...
I've reproduced in local, and then checked debugger console.
At BBMB::Util::Server#inject_order:
[1] 2.3.1-p112(#<BBMB::Util::Server>)> customer_id => "7601001029439" [2] 2.3.1-p112(#<BBMB::Util::Server>)> products => [{:pcode=>"2820351", :quantity=>2}, {:pcode=>"1583564", :quantity=>1}, {:pcode=>"2358912", :quantity=>10}] [3] 2.3.1-p112(#<BBMB::Util::Server>)> infos => {:reference=>"20.07.20162"} [4] 2.3.1-p112(#<BBMB::Util::Server>)> opts => {:deliver=>true, :create_missing_customer=>"customer_id", :transaction=>"29120", :customer_name=>"Sion"}
Request format is fine. But, Products are not found in Artikle.txt (see pcode).
And this error occur, because order(BBMB::Model::Order)'s positions
is empty.
This is expected behavior.
I've add EAN-Code also as search target.
Commit:
* Add ean13 as search target
I've countered strange issue, if project use SBSM (SBSM::Session), rake command fails.
% bundle exec rake test /usr/local/share/rbenv/versions/2.3.1/bin/ruby -I"lib:test" -I"/path/to/bbmb/.bundle/gems/ruby/2.3.0/gems/rake-11.2.2/lib" "/path/to/bbmb/.bundle/gems/ruby/2.3.0/gems/rake-11.2.2/lib/rake/rake_test_loader.rb" "/path/to/bbmb/test/util/test_server.rb" /path/to/bbmb/.bundle/gems/ruby/2.3.0/gems/rake-11.2.2/lib/rake/rake_test_loader.rb:15:in \ `require': cannot load such file -- /path/to/bbmb (LoadError) \ from /path/to/bbmb/.bundle/gems/ruby/2.3.0/gems/rake-11.2.2/lib/rake/rake_test_loader.rb:15:in `block in <main>'
It seems that this broken LOAD_PATH or ARG issue is caused by SBSM.
SERVER_NAME = nil ARGV.push('') # satisfy cgi-offline prompt #=> this ARGV @@cgi = CGI.new('html4')
This has possibility to brake other application.
Then I've removed this line.
Commit:Remove ARGV violation
In Some order requests, Injection succeeds (to bbmb), but response is returend as 500 (Internal Server Error)
It seems that this error response is caused by encoding error.
[4] 2.3.1-p112(#<XmlConvApp>)> transaction.response Encoding::CompatibilityError: incompatible encoding regexp match (UTF-8 regexp with ISO-8859-1 string) from /usr/local/share/rbenv/versions/2.3.1/lib/ruby/2.3.0/rexml/text.rb:133:in `=~'
Input xml:
<?xml version="1.0" encoding="ISO-8859-1"?> <customerOrder xmlns:xsd="http://www.w3.org/2001/XMLSchema" \ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \ compressionDesired="false" productDescriptionDesired="true" \ backLogDesired="true" language="fr" roundUpForCondition="true" version="1.0"> <client number="xxxxxx" password="xxxxx" /> <orderHeader deliveryDate="2016-07-19" referenceNumber="190720161" mannerOfTransport="tour" phoneCallDesired="false" urgent="false"> <deliveryAddress line1="Rue du Stade" line4="Pharmacie DU STADE" line5PostalCode="1965" line5City="Savièse"> <addressLine2And3Text line2="Savièse" line3="DU STADE" /> </deliveryAddress> </orderHeader> <orderLines> <productOrderLine orderQuantity="2" roundUpForCondition="true" backLogDesired="true"> <pharmaCode id="5552537" /> </productOrderLine> <productOrderLine orderQuantity="1" roundUpForCondition="true" backLogDesired="true"> <pharmaCode id="3938445" /> </productOrderLine> <productOrderLine orderQuantity="1" roundUpForCondition="true" backLogDesired="true"> <pharmaCode id="4782459" /> </productOrderLine> <productOrderLine orderQuantity="2" roundUpForCondition="true" backLogDesired="true"> <pharmaCode id="2991153" /> </productOrderLine> <productOrderLine orderQuantity="2" roundUpForCondition="true" backLogDesired="true"> <pharmaCode id="4008903" /> </productOrderLine> <productOrderLine orderQuantity="2" roundUpForCondition="true" backLogDesired="true"> <pharmaCode id="5423366" /> </productOrderLine> <productOrderLine orderQuantity="1" roundUpForCondition="true" backLogDesired="true"> <pharmaCode id="3446104" /> </productOrderLine> </orderLines> </customerOrder>
This $stdin
is Apache::Request object. It does not have set_encoding method...
This is caused in Ruyb 1.8.6, So I could not use encode incoming request at propharma.rbx file....
Links:
* http://ruby-doc.org/core-2.3.1/IO.html#method-i-read
Encoding::CompatibilityError
is caused by creation with some different encodings (z.B. UTF-8 and ISO-8859-1)
So, I've removed encoding conversion to (ISO-8859-1), and force UTF-8.
# Why _utf8 method convert to ISO-8859-1... ?
On Web UI, Result XML has still strange character, But HTTP Response will be 200 by this change.
Commit:Fix Encoding::CompatibilityError at conversion
Next day, fix this warning in SBSM.
Above change producet this warning.
/path/to/sandoz.xmlconv.bbmb.ch/.bundle/gems/ruby/2.3.0/gems/sbsm-1.2.9/lib/sbsm/cgi.rb:51: warning: regexp match /.../n against to UTF-8 string
Next day