2016-06-01 3 views
0

Я хочу, чтобы подклассы MyCustomException, но для суперкласса, который должен быть передан через веб-службу; однако вместо этого подкласс переносится. Я попытался добавить аннотацию WebFault к классам без эффекта. Я привел пример того, что в настоящее время происходит, и пример того, что я хочу сделать вместо этого.Ошибка JAX-WS: выбросить суперкласс исключение

Исключения.

public class MyCustomException extends Exception { 

    String text; 

    public static class CustomInner extends MyCustomException { 
     public CustomInner1() { 
      super("inner"); 
     } 
    } 

    public MyCustomException(String text) { 
     this.text = text; 
    } 

    public String getText() { 
     return text; 
    } 
} 

Реализация веб-сервиса. NB: Я не хочу менять то, что здесь бросают.

@Stateless(name = "MyService", mappedName = "MyService") 
@LocalBean 
@WebService(targetNamespace = "http://my.org/ns/") 
public class MyService { 

    @WebMethod 
    public String throwCustomInnerException() throws MyCustomException { 
     throw new MyCustomException.CustomInner(); 
    } 

    @WebMethod 
    public String throwCustomException() throws MyCustomException { 
     throw new MyCustomException("text"); 
    } 

} 

XML, для throwCustomException() вызова с помощью веб-службы.

<?xml version='1.0' encoding='UTF-8'?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"> 
      <faultcode>S:Server</faultcode> 
      <faultstring>pack.MyCustomException</faultstring> 
      <detail> 
       <ns2:MyCustomException xmlns:ns2="http://my.org/ns/"> 
        <text>text</text> 
       </ns2:MyCustomException> 
      </detail> 
     </S:Fault> 
    </S:Body> 
</S:Envelope> 

XML, для throwCustomInnerException() вызова с помощью веб-службы.

<?xml version='1.0' encoding='UTF-8'?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"> 
      <faultcode>S:Server</faultcode> 
      <faultstring>pack.CustomInner</faultstring> 
     </S:Fault> 
    </S:Body> 
</S:Envelope> 

То, что я хочу, чтобы случиться следующее, когда throwCustomInnerException() вызывается с помощью веб-сервиса:

<?xml version='1.0' encoding='UTF-8'?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"> 
      <faultcode>S:Server</faultcode> 
      <faultstring>pack.MyCustomException</faultstring> 
      <detail> 
       <ns2:MyCustomException xmlns:ns2="http://my.org/ns/"> 
        <text>inner1</text> 
       </ns2:MyCustomException> 
      </detail> 
     </S:Fault> 
    </S:Body> 
</S:Envelope> 

ответ

0

Вы можете изменить метод:

@WebMethod 
public String throwCustomInnerException() throws MyCustomException { 
    throw new MyCustomException.CustomInner(); 
} 

к:

@WebMethod 
public String throwCustomInnerException() throws MyCustomException { 
    throw new MyCustomException(CustomInner.getClass().getSimpleName()); 
} 
+0

Я действительно не хочу менять то, что бросается (так как это упрощенная версия фактического кода). –

 Смежные вопросы

  • Нет связанных вопросов^_^