2015-04-17 3 views
7

У нас есть чтение клиента Axis2 из веб-службы SOAP; проблема возникла, когда новые классы заглушки клиента были сгенерированы с использованием WSDL2JAVA, и их пакеты были переименованы. Сам инструмент генерации не вызывает проблемы, но WSDL2JAVA не переименовывает пакеты для всех классов, поэтому мне нужно сделать это самостоятельно.Исключения пользовательских сервисов выбрасываются как AxisFault

Любая идея о лучшем способе переименования пакетов для этих классов без проблем? Как, например, сделать замену строк разумным способом?

В некоторых случаях веб-служба бросает бизнес-исключения, и они попадают непосредственно в вызывающий код, однако этого больше не происходит, а вместо SPECIALException клиент теперь ловит AxisFault.

Вы можете увидеть ответ XML ниже:

<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <soapenv:Fault> 
      <faultcode>soapenv:Server</faultcode> 
      <faultstring>Exception message, due to business error.</faultstring> 
      <detail> 
       <ns2:SPECIALException 
        xmlns:ns2="http://com.bla.com/common/exception/xsd/2008/08"> 
        <ns2:code>7</ns2:code> 
        <ns2:message>Exception message, due to business error.</ns2:message> 
       </ns2:SPECIALException> 
      </detail> 
     </soapenv:Fault> 
    </soapenv:Body> 
</soapenv:Envelope> 

Проверку это более подробно, то разница, вероятно, из-за метод populateFaults в сформированном Bla ServiceStub классе, где имена классов устанавливаются в качестве строк для позже использование через отражение.

+0

если есть с сервера. Вы можете проверить со стороны команды сервера, чтобы проверить, что не так в вашей обработке запроса. Не забудьте поделиться с ними XML-файлами запросов и ответов. – Salman

+0

Это не с сервера, получается: если я создаю новый код с помощью WSDL2JAVA, все будет работать. Но мне нужно переименовать пакет, используя -p 'packageName' переименовывает только некоторый класс, и переименование пакетов для большего количества классов приводит к тому, что исключение снова станет AxisFault. –

+0

Я не знаю глубоко Axis2, но в Axis 1, когда вы сгенерировали классы из wsdl, он сгенерировал также файлы wsdd; в этих файлах вы также можете найти определение пакета; вы проверяли, есть ли файлы после генерации кода? вы проверяли содержимое файла? В любом случае я считаю, что самый простой способ генерации классов - использовать задачу Ant, предоставленную Axis –

ответ

1

Это было решено путем замены строки во всех сгенерированных классах заглушек, не изменяя всего имени пакета, поэтому скажите, что вы использовали '-p com.my.company.network.stubs в поколении', а затем для оставшиеся пакеты в разделе «com.bla.blo.bli», не переименовывайтесь в «com.my.company.network.stubs.bli», но делайте это до «com.my.company.network.stubs.bla.blo. bli '

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