В течение нескольких часов я боролся с проблемой, связанной с Axis2 и Rampart.Я довольно много гуглил и пока не нашел решения.Я даже посмотрел на исходный код и прошел через него с помощью отладчика.Хотя это просветило меня в отношении ошибки и ее причины, это не приблизило меня к решению.
Происходящая ошибка:
java.lang.IllegalArgumentException: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}ProtectionToken is not a <wsp:Policy> element.
at org.apache.neethi.PolicyBuilder.getPolicyOperator(PolicyBuilder.java:177)
at org.apache.neethi.PolicyBuilder.getPolicy(PolicyBuilder.java:125)
at org.apache.neethi.PolicyEngine.getPolicy(PolicyEngine.java:102)
at org.apache.ws.secpolicy11.builders.SymmetricBindingBuilder.build(SymmetricBindingBuilder.java:41)
at org.apache.ws.secpolicy11.builders.SymmetricBindingBuilder.build(SymmetricBindingBuilder.java:36)
at org.apache.neethi.AssertionBuilderFactoryImpl.invokeBuilder(AssertionBuilderFactoryImpl.java:129)
at org.apache.neethi.AssertionBuilderFactoryImpl.build(AssertionBuilderFactoryImpl.java:110)
at org.apache.neethi.PolicyBuilder.processOperationElement(PolicyBuilder.java:225)
at org.apache.neethi.PolicyBuilder.getAllOperator(PolicyBuilder.java:185)
at org.apache.neethi.PolicyBuilder.processOperationElement(PolicyBuilder.java:218)
at org.apache.neethi.PolicyBuilder.getExactlyOneOperator(PolicyBuilder.java:181)
at org.apache.neethi.PolicyBuilder.processOperationElement(PolicyBuilder.java:216)
at org.apache.neethi.PolicyBuilder.getPolicyOperator(PolicyBuilder.java:175)
at org.apache.neethi.PolicyBuilder.getPolicy(PolicyBuilder.java:114)
at org.apache.neethi.PolicyBuilder.getPolicy(PolicyBuilder.java:100)
at org.apache.neethi.PolicyEngine.getPolicy(PolicyEngine.java:80)
at com.geometryit.blis.ablis.contentManagement.ContentManagementServiceStub.getPolicy(ContentManagementServiceStub.java:413)
at com.geometryit.blis.ablis.contentManagement.ContentManagementServiceStub.populateAxisService(ContentManagementServiceStub.java:57)
at com.geometryit.blis.ablis.contentManagement.ContentManagementServiceStub.<init>(ContentManagementServiceStub.java:108)
at com.geometryit.blis.ablis.contentManagement.ContentManagementServiceStub.<init>(ContentManagementServiceStub.java:97)
at com.geometryit.blis.production.Publish.init(Publish.java:214)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1133)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1087)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:996)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4834)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5155)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5150)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Хотя я уже использовал Axis2, яЯ не эксперт с этим и тем более с Rampart.У меня было существующее веб-приложение, которое было расширено, чтобы представить клиента для взаимодействия с веб-службой.Я установил Axis2 v1.6.1 и Rampart v1.6.1 в соответствии с инструкциями.Я создал клиентские Java-классы, используя скрипт WSDL2Java, и сгруппировал сгенерированные классы в jar.Затем я добавил соответствующие jar-файлы и репозиторий Axis2 в веб-приложение.WSDL и XSD содержатся во вложении wsdl.zip http://mail -archives.apache.org / mod_mbox / axis-java-user / 201112.mbox /% 3C4B95BC7335A13A42AD0D23462F91AE6F615D057F41ry 40it.com.ge 3E * 0* (Axis2 User Mailing List) Прикрепления находятся внизу страницы.
Раздел кода, который инициализирует клиентскую часть веб-службы:
try
{
ConfigurationContext context = ConfigurationContextFactory.createConfigurationContextFromFileSystem(this.getWebInfPath() + "repository" );
**ablisContentManagementService = new ContentManagementServiceStub( context, "http://services.ablis.uat.business.gov.au/ContentManagement.svc" );
ServiceClient ablisContentManagementServiceClient = ablisContentManagementService._getServiceClient();
ablisContentManagementServiceClient.engageModule( "addressing" );
ablisContentManagementServiceClient.engageModule( "rampart" );
ablisAxisFault = null;
}
catch ( AxisFault af )
{
ablisContentManagementService = null;
ablisAxisFault = af;
af.printStackTrace();
}
catch ( Throwable t )
{
t.printStackTrace();
}
Я знаю, чтоRampart не настроен должным образом, но ошибка отображается в выделенной строке (**).Это раньше, когда конфигурация Rampart происходила бы, если бы это было сделано.
При отладке я заметил, что XML, как экземпляр OMElement, передаваемый в SymmetricBindingBuilder.build () (см. Stacktrace), является (сокращендля краткости)
<wsp:Policy>
<sp:ProtectionToken>
.
.
.
</sp:ProtectionToken>
.
.
.
</wsp:Policy>
Из кода в SymmetricBindingBuilder.build () я думаю, что XML должен быть:
<sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:ProtectionToken>
.
.
.
</sp:ProtectionToken>
.
.
.
</wsp:Policy>
</sp:SymmetricBinding>
Изменение передаваемого XML исправит ошибку, нокак это сделать.
Возможно, я сделал ошибки или упущения в том, что я сказал или сделал, чтобы быть кратким.Если важные детали отсутствуют, пожалуйста, выделите их.Я знаком с Axis2, а не с Rampart, поэтому любая помощь приветствуется.Я с удовольствием отвечу на вопросы.Любая помощь с благодарностью.