Генерация WebService с CXF генерирует класс Exception_Exception - PullRequest
3 голосов
/ 28 ноября 2011

У нас есть реализация веб-службы, которая выбрасывает пользовательский SecurityException.

public class SecurityException extends Exception {

Служба затем преобразуется в wsdl с помощью плагина maven java2ws. Полученный файл .wsdl содержит

  <xs:element name="SecurityException" type="tns:SecurityException"/>
  <xs:complexType name="SecurityException">
  ...
  <wsdl:message name="SecurityException">
    <wsdl:part name="SecurityException" element="tns:SecurityException">
    </wsdl:part>
  </wsdl:message>

Теперь, если я запускаю wsdl2java для файла .wsdl, я получаю SecurityException файл:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SecurityException")
public class SecurityException {


}

и SecurityException_Exception файл:

@WebFault(name = "SecurityException", targetNamespace = "http://service...../")
public class SecurityException_Exception extends Exception {


private ....SecurityException securityException;

public SecurityException_Exception() {
    super();
}

public SecurityException_Exception(String message) {
    super(message);
}

public SecurityException_Exception(String message, Throwable cause) {
    super(message, cause);
}

public SecurityException_Exception(String message, ....SecurityException securityException) {
    super(message);
    this.securityException = securityException;
}

public SecurityException_Exception(String message, ....SecurityException securityException, Throwable cause) {
    super(message, cause);
    this.securityException = securityException;
}

public ....SecurityException getFaultInfo() {
    return this.securityException;
}
}

Как я могу избежать ненужного класса? Почему это даже генерируется? Почему он не может просто воссоздать старый класс?

SecurityException extends Exception

(мы используем cxf версии 2.5, поэтому ошибка <2.3 с суперклассами, которую я обнаружил в Google, похоже, не применима) </p>

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Понял. Очевидно, вы не можете избежать использования вспомогательного класса, поскольку исключения должны переноситься при использовании в веб-службе, поскольку они не сериализуемы.

0 голосов
/ 02 октября 2013

Я использую JAXB, встроенный в maven (цель jaxws-maven-plugin / wsimport), но у меня была та же проблема. (Это генерировало BusinessException и BusinessException_Exception).

Мое исправление заключалось в том, чтобы поместить исключение в другое пространство имен. Итак, теперь у меня есть два файла BusinessException, сгенерированные в двух разных папках, и один является исключением, который принимает другой в качестве своего параметра. Компилируется нормально, и без исключений Exception_Exception.

...