いくつかのオンラインサンプル(コピー/貼り付け)を使用して、Webサービスサーバーとクライアントを作成しました。 OKです。クライアントから要求が送信され(すべてが同じPC上で実行されます)、サーバーが応答します。今、私は接続して要求を送信する(クライアント情報を得る)コードを(サーバー側で)追加しようとしています。私はそれが行くべきだと思うところにそのコードを追加しましたが、NullPointerExceptionを取得します。私は明らかに何かが欠けている。 以下のコードは、Webサービスメソッドの実装を示しています。 addPersonメソッドに新しい "クライアント識別コード"を追加しました。 実行時にクライアントがaddPersonとサーバーを呼び出すと、次のようになります。
HttpExchange exchange =(HttpExchange)msgx.get( "com.sun.xml.ws.http.exchange");Java:クライアント情報を取得するWebサービスサーバー
私はこれが何か単純であることを知っています(コードは間違った場所にありますか?)しかし、私はこのwedサービスコンセプトには全く新しいです。どんな助けでも大歓迎です。 https://www.journaldev.com/9123/jax-ws-tutorial
@WebService(endpointInterface = "tests.PersonService")
public class PersonServiceImplementation implements PersonService {
@Resource
WebServiceContext wsContext;
private static Map<Integer,Person> persons = new HashMap<Integer,Person>();
@Override
@WebMethod
public boolean addPerson(Person p) {
//// idetify who poked us ////
MessageContext msgx = wsContext.getMessageContext();
HttpExchange exchange = (HttpExchange)msgx.get("com.sun.xml.ws.http.exchange");
InetSocketAddress remoteAddress = exchange.getRemoteAddress();
String remoteHost = remoteAddress.getHostName();
System.out.println("Who poked us: " + remoteHost);
//////////////////////////////
if(persons.get(p.getId()) != null) return false;
persons.put(p.getId(), p);
return true;
}
@Override
public boolean deletePerson(int id) {
if(persons.get(id) == null) return false;
persons.remove(id);
return true;
}
@Override
public Person getPerson(int id) {
return persons.get(id);
}
@Override
public Person[] getAllPersons() {
Set<Integer> ids = persons.keySet();
Person[] p = new Person[ids.size()];
int i=0;
for(Integer id : ids){
p[i] = persons.get(id);
i++;
}
return p;
}
}
コードが失敗する:InetSocketAddress remoteAddress = exchange.getRemoteAddress();私はどのようにクライアントがアドレスを持っているか分かりませんか?私はローカルマシン(ローカルホスト)からの接続を意味する何かを返す必要があります。それ以外の場合、サーバーへの接続方法はどうすればわかりますか?どうも – kr16