私は、Excelファイルに基づいてSOAPリクエストを生成し、その結果を電子メールで送信するソフトウェアを持っています。Parallelstream.ForEach()double item
リクエストの潜在的なサイズのため、私はsoap-request-handlingを並行して実行します。次のコードは上記のコードを処理します。私は、データの2つの部分でコードを実行すると
public void HandleData() {
List<NodeAnalysisReply> replies = Collections.synchronizedList(new ArrayList<>());
new Thread(() -> {
List<NodeAnalysisRequest> requests;
SOAPMessageFactory factory = new SOAPMessageFactory();
SOAPResponseParser parser = new SOAPResponseParser();
try {
requests = new ExcelParser().parseData(file);
requests.parallelStream().forEach((request) -> {
try {
SOAPMessage message = factory.createNodeRequestMessage(
new RequestObject(requestInfoFactory.makeInfo(trackingID), request));
SOAPMessage response = new SoapConnector(server.getUrl()).executeRequest(message);
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.writeTo(out);
NodeAnalysisReply curReply = parser.ParseXMLResponse(out.toString(), request);
synchronized (replies) {
System.out.println("Adding: " + curReply.getRequest().toString());
replies.add(curReply);
}
} catch (UnsupportedOperationException | SOAPException | IOException e) {
handleSoap(e.getMessage());
}
});
} catch (IOException e) {
handleBadParse();
}
try {
for(NodeAnalysisReply reply : replies){
System.out.println("Data: " + reply.getRequest().toString());
}
mailer.SendEmail("Done", email, replies);
} catch (MessagingException e) {
e.printStackTrace();
}
}).start();
}
、次のことが起こる:
Adding: Søndergade 52 6920 // OK
Adding: Ternevej 1 6920 // OK
Data: Ternevej 1 6920 // What
Data: Ternevej 1 6920 // WHAT..
are equal? true
それがリストに両方の項目が追加されますので、にもかかわらず、最後の1は、両方の場所を取るように、それはそうです。どのようにそれが来て、どのように私はそれを解決するのですか? - 私は本当にParrallel.ForEach()フォームC#を欠場しています!
EDIT:要求通り、NodeAnalysisReplyのコード。
public class NodeAnalysisReply {
public ReplyInfo getReplyInfo() {
return replyInfo;
}
public void setReplyInfo(ReplyInfo replyInfo) {
this.replyInfo = replyInfo;
}
public List <nodeAnalysisListDetails> getNodeAnalysisListDetails() {
return nodeAnalysisListDetails;
}
public void setNodeAnalysisListDetails(List <nodeAnalysisListDetails> nodeAnalysisListDetails) {
this.nodeAnalysisListDetails = nodeAnalysisListDetails;
}
public void addNodeAnalysisListDetail(nodeAnalysisListDetails nodeAnalysisListDetails) {
this.nodeAnalysisListDetails.add(nodeAnalysisListDetails);
}
ReplyInfo replyInfo;
public String getFormattedXML() {
return formattedXML;
}
public void setFormattedXML(String formattedXML) {
this.formattedXML = formattedXML;
}
String formattedXML;
public NodeAnalysisRequest getRequest() {
return request;
}
public void setRequest(NodeAnalysisRequest request) {
this.request = request;
}
NodeAnalysisRequest request;
List <nodeAnalysisListDetails> nodeAnalysisListDetails = new ArrayList < >();
}
私たちにNodeAnalysisReplyのコードを表示 –
@JBNizetがOPに追加されました。 –
リクエストフィールドが静的であると思われました。そうではありません。私の次の疑念は、parser.ParseXMLResponseは常に同じオブジェクトを返すということです。パーサーのコードを表示 –