Ваш провайдер не прав, сообщения семантически эквивалентны; ваш неквалифицирован, их квалифицирован. Вы используете Axis или Axis2? Если вы используете Axis, я предлагаю вам перейти на Axis2 для более надежного, совместимого со стандартами стека SOAP (оба продукта плохие, но Axis2 менее плохой).
Я полагаю, вы создаете свой клиент с помощью wsdl2java? Если вы не можете заставить этот инструмент генерировать сообщение так, как вам нравится, тогда вам лучше всего сгенерировать сообщение программно.
С Axis2 вы можете сделать это с помощью AXIOM API. См. эту ссылку для примера использования API. Обратите внимание, что с большинством методов, например, createOMElement , вы можете передать префикс пространства имен. Поэтому, если ваш провайдер требует этого, вы можете передать строку, содержащую «imk», в качестве параметра namespacePrefix.
Если вы в конечном итоге делаете это программно и собираетесь писать только простой клиент, тогда я СИЛЬНО предлагаю вам отказаться от подхода Axis / Axis2 и использовать JAX-WS вместо стека, так как является частью Java начиная с 1.6. API чище, а документация лучше. Например, ниже приведен очень простой клиент, который я написал для отправки запроса SOAP на наш сервер JIRA. В примере кода создаются как квалифицированные, так и неквалифицированные элементы.
QName port = new QName(endpoint, "subversionsoapservice-v2");
QName serviceName = new QName(endpoint, "ISubversionSoapServiceService");
Service service = Service.create(serviceName);
service.addPort(port, SOAPBinding.SOAP11HTTP_BINDING, endpoint);
Dispatch<SOAPMessage> dispatch = service.createDispatch(port, SOAPMessage.class, Service.Mode.MESSAGE);
MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
SOAPMessage request = factory.createMessage();
SOAPBody body = request.getSOAPBody();
SOAPElement reindexRepository = body.addChildElement("reindexRepository", "jira", "http://soap.ext.plugin.jira.atlassian.com");
SOAPElement in0 = reindexRepository.addChildElement("in0");
in0.addTextNode("test");
request.saveChanges();
dispatch.invoke(request);
XML, отправленный клиентом, выглядит следующим образом:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<jira:reindexRepository xmlns:jira="http://soap.ext.plugin.jira.atlassian.com">
<in0>test</in0>
</jira:reindexRepository>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>