2010-02-05 2 views
0

I'm потребляющих веб-сервис SOAP, что у него есть пространство имен, некоторые из которых напоминают:Потребляя SOAP с сервисом с пространством имен

<?xml version="1.0" encoding="UTF-8" ?> 
<wsdl:definitions targetNamespace="http://www.company.com/" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:company="http://www.company.com/" 
    xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"> 
    <wsdl:types> 
    <xsd:schema elementFormDefault="qualified" targetNamespace="http://www.company.com/" version="0.1" 
    xmlns:cmp="http://www.company.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

    <xsd:element name="Number" type="cmp:NumberType" /> 

Моя проблема когда .net сериализации объекта он не включает в себя префикс CMP в xml. Он отображает <Number .... вместо <cmp:Number ...

Что я могу решить?

ответ

0

Что происходит, когда вы отправляете этот запрос? Предположительно это удастся, потому что cmp:NumberType часть

<xsd:element name="Number" type="cmp:NumberType" /> 

относится не к имени элемента, но с именем типа в вышеупомянутом WSDL. Это сложный тип, иначе это будет что-то вроде xsd:int. Итак, как я уже сказал, ваш код должен работать, особенно если вы импортировали WSDL в качестве WebReference в свой проект Visual Studio.

+0

Проблема заключается в использовании веб-сервера java, и он возвращает ошибку ввода. – fravelgue

0

Я недавно слышал о программах, которые отличают между

<Number xmlns="http://www.company.com/" /> 

и

<tns:Number xmlns:tns="http://www.company.com/" /> 

Эти два примера идентичны с точки зрения стандартов XML, но есть программы, которые не следуют стандарты, а вместо этого создают свои собственные стандарты.

Можете ли вы опубликовать XML-код, который вызывает проблему? Также опубликуйте полное сообщение об ошибке, которое получено.

+0

Sry, я могу опубликовать детали этого api. Но ошибка веб-сервера java возвращает ошибку ввода. Могу ли я изменить xml, размещенную в запросе на мыло? – fravelgue

+0

@fravelgue: можете ли вы хотя бы опубликовать полное сообщение об ошибке? –

0

Префикс, используемый для элемента, действителен только в пределах области объявления префикса. Другими словами, этот префикс 'cmp' действителен только для этого сериализованного XML.

Префикс - это не что иное, как аббревиатура пространства имён, на котором оно предназначено. В этом случае «cmp» означает {http://www.company.com/}.

Когда вы загружаете этот XML в документ DOM, «реальное объявление» для узла внутри этой DOM теперь «{http://www.company.com/}: Number".

Это даже очень короткое пространство имен, просто представьте среднее пространство имен и его размер, и я думаю, мы можем согласиться с тем, почему использование сокращений (называемых префиксами в XML) является хорошей идеей при сериализации любого XML-документа.

Но, однако, вы его сериализуете, он не меняет данные, представляющие его. Так

 
<bla xmlns="http://www.company.com/" /> 

является syntaxtically разным, но значение мудро же, как

 
<cmp:bla xmlns:cmp="http://www.company.com/" /> 
<{http://www.company.com/}:bla /> 

После прочтения этого, это на самом деле является требование предоставить сериализированную XML в формате, который использует «ЦУП» как префикс? (с его заголовка мыла, я думаю, что этого требования нет), или мы можем использовать ЛЮБОЙ стиль сериализации xml, если мы не будем изменять данные, представляющие его? (это то, что W3C XML 1.0 + Namespaces совместимых парсеров заботиться о)

Если его не requrement, позволяет не делать это один :)

Если это требование;

Вы можете связать XmlNamespaceManager с XmlSerializer. Это позволяет вам установить ассоциации префикс-to-namespaceuri, которые затем будут использоваться при сериализации объекта.

Надеюсь, что это поможет,

+0

Я только что прочитал, что вы заявили, что это java-сервис, и это породило ошибку, когда вы пытались запустить ваш запрос. Перед тем как спуститься по пути XmlSerializer, вы проверили, что происходит по проводу? Является ли ваш заголовок для мыла? это в правильном пространстве имен (независимо от префикса, проверьте пространство имен-uri, связанное с xmlns ='xxx 'или bla: soapheader xmlns: bla ='xxx'). Вы проверили с поставщиками веб-службы, если это «известная проблема»? –

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