我試圖導入並運行現有的和工作的Java代碼轉換成的IntelliJ但我遇到了一些問題,這將導致我寫這個問題在這裏:行爲差異:的IntelliJ VS Eclipse的
我的風暴拓撲結構(JAVA)的代碼正在從Websphere MQ讀取數據以及接收到的消息,這是一個字節流,並由「Message Parser」項目解析;它解析這些字節流「字符串」並根據一些規則生成有意義的消息。
當我在Eclipse中運行它,它工作沒有任何問題,但在的IntelliJ它讓我看到有關消息解析器問題。我感覺到它作爲編碼的問題,並試圖:
- 更改代碼文件編碼成UTF-8
- 更改行分隔成爲相同(UNIX)
但這並沒有使我解析度。
因爲你們都有很好的專業知識的Java IDE,所以我希望你必須面對的IDE的Java代碼的許多倍的兼容性問題。 請讓我知道是否有任何方法可以解決此問題。
哪裏的問題是發生在下面給出的代碼:
public void execute(Tuple input) {
String strMessage = null;
Message posMsg = null;
Object jmsMsg = input.getValueByField(FieldEnum.FIELD_MESSAGE
.getFieldName());
posMsg = ((JMSMessage) jmsMsg);
strMessage = convertStreamToString(posMsg);
System.out.println("Message recieved from MQ : "+ strMessage);
@SuppressWarnings("rawtypes")
Map parsedSegments = MessageParser.instance().parseMessage(
strMessage);
@SuppressWarnings("serial")
Type nposMessageType = new TypeToken<Map<String, Map<String, String>>>() {
}.getType();
String segmentsJson = gson.toJson(parsedSegments, nposMessageType);
System.out.println(" testing the messages "+segmentsJson);
MessageDetail MessageDetail = new MessageDetail(
Constant.TOPOLOGY_NAME, segmentsJson);
this.outputCollector.emit(Constant.STREAM_MSG_PARSER_SUCCESS,
new Values(MessageDetail));
this.outputCollector.ack(input);
}
/**
* Convert stream to string
*
* @param jmsMsg
* @return
* @throws Exception
*/
private static String convertStreamToString(final Message jmsMsg) throws Exception {
String stringMessage = "";
BytesMessage bMsg = (BytesMessage) jmsMsg;
byte[] buffer = new byte[40620];
int byteRead;
ByteArrayOutputStream bout = new java.io.ByteArrayOutputStream();
while ((byteRead = bMsg.readBytes(buffer)) != -1) {
bout.write(buffer, 0, byteRead);
}
bout.flush();
stringMessage = new String(bout.toByteArray());
bout.close();
return stringMessage;
}
這將是很難告訴你什麼是錯的,如果我們不知道的IntelliJ正顯示出你的問題是什麼。 – Dragondraikk
@Dragondraikk正如我所說:Intellij在解析從MQ接收的消息時遇到問題,而Eclipse解析它。 – tom
當然,它會給你一個特定的錯誤信息?在你的問題中有這個問題會有所幫助。 – Dragondraikk