したがって、xmlのデータをソケット経由で渡します。サーバ側を走らせたら、cmdを起動して "telnet localhost 999"コマンドを実行します。この時点で新しいスレッドが開始され、このスレッドではStaxパーサーで入力ストリームを渡します。 cmdでは、単純なxmlファイル(ファイルからのコピーコピー)を入力し、このデータはサーバー側に送信され、正しく解析されます。telnetとソケット経由でxmlを送信する際の問題
問題:私のパーサーがデータを解析すると、何かを待っています。つまり、入力ストリームからのデータが正しく解析され、このデータのエンティティがいっぱいになりましたが、プログラムは次のステップに渡されません。コードここ
:
<?xml version="1.0" encoding="UTF-8" ?>
<login>
<user-name>name</user-name>
<password>password</password>
</login>
@Override
public void run() {
try {
try {
InputStream is = socket.getInputStream();
boolean complete = false;
while (!complete) {
// handle command was received from client
if (is.available() == 0) {
continue;
}
Parser parser = new Parser();
parser.parseXmlStax(is);
String[] commands = parser.commands;
// if wrong format, send number of error end exit
if (!checkCommands(commands)) {
DataOutputStream oos = new DataOutputStream(
socket.getOutputStream());
oos.writeBytes("Eror. Try again");
continue;
}
public void parseXmlStax(InputStream is) throws XMLStreamException,
IOException, ParserConfigurationException, SAXException {
XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlReader = xmlFactory.createXMLStreamReader(is);
int type = xmlReader.getEventType();
try {
while (true) {
switch (type) {
case XMLStreamConstants.START_DOCUMENT:
logger.info("Stax parsing: start document");
break;
case XMLStreamConstants.START_ELEMENT:
logger.info("Stax parsing: start element");
thisElement = xmlReader.getLocalName();
break;
case XMLStreamConstants.CHARACTERS:
logger.info(String.valueOf("CHARACTERS"));
char[] ch = xmlReader.getTextCharacters();
int length = xmlReader.getTextLength();
int start = xmlReader.getTextStart();
String command = new String(ch, start, length);
if (thisElement.equalsIgnoreCase(LoginItem.LOGIN)) {
commands[0] = thisElement;
} else if (!xmlReader.isWhiteSpace()
&& thisElement
.equalsIgnoreCase(LoginItem.USER_NAME)) {
commands[1] = command;
} else if (!xmlReader.isWhiteSpace()
&& thisElement.equalsIgnoreCase(LoginItem.PASSWORD)) {
commands[2] = command;
}
if (thisElement.equalsIgnoreCase(LoginItem.LOGOUT)) {
commands[0] = thisElement;
commands[1] = command;
}
if (thisElement.equalsIgnoreCase(LoginItem.STATUS)) {
commands[0] = thisElement;
commands[1] = command;
}
break;
case XMLStreamConstants.END_ELEMENT:
logger.info("Stax parsing: end element");
break;
case XMLStreamConstants.END_DOCUMENT:
logger.info("Stax parsing: end document");
break;
}
if (!xmlReader.hasNext()) {
break;
}
type = xmlReader.next();
}
} finally {
xmlReader.close();
}
}
クライアントがデータをフラッシュしていないように見えます。 – MeBigFatGuy
はい、私はクライアントを持っていません。私はインスタンス接続のためにtelnetを使い、xmlファイルをコンソールに入れます。私は教育のためにそれをする。これは私の仕事であり、私は理解できませんでした。 –