У меня проблема с обменом сообщениями веб-службы.
1) Jboss 4.2.3GA
2) Класс веб-службы, который не имеет состояния EJB.Он использует шифрование и аннотируется так:
@Local
@Stateless
@EndpointConfig(configName = "Standard WSSecurity Endpoint")
@SOAPBinding(style = SOAPBinding.Style.RPC)
@WebService
3) Веб-служба находится в Module_1
4) Клиент имеет MBean.Он имеет следующие аннотации:
@Service(name = "MyWebServiceClient")
@Local(MyWebServiceClient.class)
@Management(MyWebServiceClient.class)
5) MyWebServiceClient находится в Module_2
6) Module_1 имеет META-Каталог INF со следующим содержимым, связанным с WS:
- jboss-wsse-server.xml
- server.keystore
- server.truststore
jboss-wsse-server.xml имеет следующее содержимое:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-ws-security xmlns="http://www.jboss.com/ws-security/config"
xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="http://www.jboss.com/ws-security/config
www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd">
<key-store-file>META-INF/server.keystore</key-store-file>
<key-store-password>qwerty</key-store-password>
<key-store-type>jks</key-store-type>
<trust-store-file>META-INF/server.truststore</trust-store-file>
<trust-store-password>qwerty</trust-store-password>
<trust-store-type>jks</trust-store-type>
<key-passwords>
<key-password alias="server" password="qwerty"/>
<key-password alias="client" password="qwerty"/>
</key-passwords>
<config>
<sign type="x509v3" alias="server"/>
<encrypt type="x509v3" alias="client"/>
<requires>
<signature/>
<encryption/>
</requires>
</config>
</jboss-ws-security>
7) Module_2 имеет папку 'META-INF со следующими файлами:
- jboss-wsse-client.xml
- standard-jaxws-client-config.xml
- client.keystore
- client.truststore
jboss-wsse-client.xml содержит следующее:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-ws-security xmlns="http://www.jboss.com/ws-security/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/ws-security/config
http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd">
<key-store-file>META-INF/client.keystore</key-store-file>
<key-store-password>qwerty</key-store-password>
<key-store-type>jks</key-store-type>
<trust-store-file>META-INF/client.truststore</trust-store-file>
<trust-store-password>qwerty</trust-store-password>
<trust-store-type>jks</trust-store-type>
<key-passwords>
<key-password alias="server" password="qwerty"/>
<key-password alias="client" password="qwerty"/>
</key-passwords>
<config>
<sign type="x509v3" alias="client"/>
<encrypt type="x509v3" alias="server"/>
<requires>
<signature/>
<encryption/>
</requires>
</config>
</jboss-ws-security>
standard-jaxws-client-config.xml содержит следующее:
<?xml version="1.0" encoding="UTF-8"?>
<jaxws-config xmlns="urn:jboss:jaxws-config:2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd">
<client-config>
<config-name>Standard WSSecurity Client</config-name>
<post-handler-chains>
<javaee:handler-chain>
<javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>
<javaee:handler>
<javaee:handler-name>WSSecurityHandlerOutbound</javaee:handler-name>
<javaee:handler-class>org.jboss.ws.extensions.security.jaxws.WSSecurityHandlerClient
</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</post-handler-chains>
</client-config>
</jaxws-config>
Оба модуля объединены после процесса сборки в один и тот же файл.Поэтому META-INF содержит все эти файлы xml и encription.
Проблема заключается в том, что при попытке отправить сообщение из Client MBean веб-служба генерирует исключение:
org.jboss.ws.core.CommonSOAPFaultException: эта служба требует , которого нет.
Насколько я знаю, это означает, что входящее мыльное сообщение не содержит заголовок sing от клиента.После активации отслеживания мыльных сообщений в log4j я вижу следующее тело сообщения от клиента:
<S:Envelope xmlns:S='http://schemas.xmlsoap.org/soap/envelope/'>
<S:Body>
<ns2:addPoint xmlns:ns2='http://x.y.z.com/'>
<deviceId>Device 1</deviceId>
<color>GREEN</color>
</ns2:addPoint>
</S:Body>
</S:Envelope>
Но свойства знака указаны в xmls сервера и клиента (см. Tat).Поэтому я не могу понять, почему сообщение о результате не подписано.
Может быть проблема в том, что все файлы конфигурации находятся в одном и том же META-INF?Имеет ли это значение?
Нужна помощь.