2016-04-13 12 views
0

私はSOAP Digestを使用してSOAP応答を解析しようとしていますが、SaxParserExceptionを取得しています。ここで私が持っているものです。apache digesterサックスパーサー例外

Main.java

Digester digester = org.apache.commons.digester3.binder.DigesterLoader 
      .newLoader(new FromAnnotationsRuleModule() { 

       @Override 
       protected void configureRules() { 
        bindRulesFrom(SubmitResponse.class); 
       } 

      }).newDigester(); 
SubmitResponse response = digester.parse(new ByteArrayInputStream(
       "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><SubmitResponse xmlns=\"http://schemas.example.com/digitalrequest/v5.00\"><SubmitResult xmlns:a=\"http://schemas.datacontract.org/2004/07/example.Lib.v500\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><a:ID>0</a:ID><a:TaskResponses><a:TaskResponse><a:Task><a:WorkOrderID>0</a:WorkOrderID></a:Task></a:TaskResponse></a:TaskResponses></SubmitResult></SubmitResponse></s:Body></s:Envelope>" 
         .getBytes())); 

SubmitResponse.java

@ObjectCreate(pattern = "s:Envelope") 
public class SubmitResponse implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private List<TaskResponse> taskResponses; 

    public List<TaskResponse> getTaskResponses() { 
     return taskResponses; 
    } 

    public void setTaskResponses(List<TaskResponse> taskResponses) { 
     this.taskResponses = taskResponses; 
    } 

    @SetNext 
    public void addTaskResponses(TaskResponse taskResponse) { 
     this.taskResponses.add(taskResponse); 
    } 
} 

TaskResponse.java

@ObjectCreate(pattern = "s:Envelope/s:Body/SubmitResponse/SubmitResult/a:TaskResponses/a:TaskResponse") 
public class TaskResponse implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @BeanPropertySetter(pattern = "a:Task/a:WorkOrderID") 
    private String workorderId; 

    public String getWorkorderId() { 
     return workorderId; 
    } 

    public void setTaskResponseList(String workorderId) { 
     this.workorderId = workorderId; 
    } 

    @Override 
    public String toString() { 
     return "TaskResponse [workorderId=" + workorderId + "]"; 
    } 

} 

しかし、このコードは私にSaxParserExceptionを与えています。私は正しいパターンを与えていないと推測しています。誰かがお勧めしますか?

答えて

0

SaxParserExceptionを超えて根本的な原因を調べる必要があります。これはaddTaskResponsesメソッドのNullPointerExceptionです。

private List<TaskResponse> taskResponses = new ArrayList<>(); 

乾杯

+0

おかげ@Barney:あなたはそれに物事を追加しようとする前にリストを作成する必要があるので、そこから、taskResponsesが初期化されないことは明白です。それは 'SaxParserException'を解決しました。私はここでとてもばかげていた。私は 'a:WorkOrderID'の値を得るためにパターンをどうすればいいのか教えてください。 – Praz

+0

@Praz:注釈を使用したことはありませんが、相対パスではなくフルパスを指定するだけです。つまり、s:Envelope/s:Body /.../ a:Task/a:WorkOrderID'です。上記のコードでは、 'setWorkorderId'メソッド(カットアンドペーストエラーのように見えます - setTaskResponseListと呼ばれます)を持たないので、' BeanPropertySetter'はマッチしません。これはあなたの問題かもしれません。 – Barney

+0

良いキャッチ。セッターメソッドと相対パスが問題でした。どうもありがとう。 – Praz

関連する問題