前提・実現したいこと
こんにちは。私は国立国会図書館の書誌情報取得システムの一つSRUに個人的なプログラムを通信接続しようとしています。皆さんに技術的なサポートを仰ぎたく存じております。
私は自分の蔵書の登録と管理をできるようにするプログラムを作っています。そのプログラムにはある一冊の本のISBNコードをキー入力することのみで自動的にその題名、著者名、発行所、刊行日等が、国会図書館の書誌情報取得システムであるSRUからXMLデータで取り込む機能を付ける予定です。
このような機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
中途までそのプログラムを作ったのちに、一つの問題が生じました。私は試しに国会図書館のSRUに対して、HTMLのformタグのaction属性に以下のような正しいURLを装填してsubmitしてみました。(9784865101911は実在するisbnです。)
http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&query=isbn=9784865101911
しかしそれは失敗し,戻されてくる筈のその本のXMLデータを取得できませんでした。
その時下記のようなURLがアドレスバーに表示されました。これは上述の正しい完全なURLの一部が欠けた不完全なURLです。
http://iss.ndl.go.jp/api/sru?isbn=9784865101911
私は、自分ではSRUに完全なURLをsubmitしたつもりなのにかかわらず、不完全なURLが送られて、XMLデータが獲得できなかったのではないかと想像しています。私にはなぜURLの一部が欠けるのか判りません。そこで皆さんにお願いなのですが、どうか国会図書館のSRUに完全なURLを送って、XMLデータを取得できるための方法を御教示下さい。
**
私には完全なURLのうちの、operation と searchRetrieve&query の間の = および searchRetrieve&query と isbn の間の = とが、代入演算子として働き、最後に式全体が評価されて isbn= なったかのようにも想像されます。
一方で正しい完全なURLを直接アドレスバーに入力して送信すると、国会図書館のシステムのSRUに届いて、その一冊の本のXMLデータが正しく取得されています。だから、上述の完全なURLにまちがいはないのです。
エラーメッセージ
`An error ocurred. operation is not searchRetrive.(空のXMLデータに表示される。)
該当のソースコード
言語
Java,JavaScript
ソースコード
•画面JSP :seachBook.jsp
<!-- <%@page language=”java” contentType=”text/html; charset=UTF-8” pageEncoding=”UTF-8”%> <!DOCTYPE html> <html> <head> <meta charset=”UTF-8”> <title蔵書検索登録画面</title> </head> <body> <h1>蔵書検索登録</h1> <form action=”http://iss.ndl.go.jp” name=”seachForm” onsubmit=”changeAction()” method=”get” id=”formId”> ISBNコード:<input type=”text” name=”isbn” id=”textId”> </form> <script> Function changeAction(){ let formObject = document.getElementById(‘formId’); formObject.action=”http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&query=isbn=” + document.getElement.ById(‘textId’).value; } </script> </body> </html> -->●リクエストに応えて画面JSPにフォワードするサーブレット。:collectBook.java
package original;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CollectBook")
public class CollectBook extends HttpServlet {
private static final long serialVersionUID = 1L;
public CollectBook() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String forwardPath = null; forwardPath = "/WEB-INF/jsp/searchBook.jsp"; RequestDispatcher dispatcher =request.getRequestDispatcher(forwardPath); dispatcher.forward(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
}
試したこと
URL上の=にエスケープが必要なのかと思いをエンコードして%3D%0D%0Aにかえてみましたが、結果はおなじくsubmit後アドレスバーに一部が欠けたURLが表示され空のXMLデータしか取得できなくて上記と変わらぬエラーメッセージが出ました。
補足情報(FW/ツールのバージョンなど)
ブラウザ:Google Chrome OS:Windows10
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/20 09:04