2010-02-17 4 views
11

Je dois consommer un Webservice Java avec des éléments de type Date et Heure.Consommation de Java Webservice avec des éléments Date et Heure dans WCF

Exemple du wsdl:

... 
<xsd:element name="fromTime" nillable="true" type="xsd:time" /> 
<xsd:element name="dateOfInspection" type="xsd:date" /> 
... 

Lors de la consommation Webservice via Ajouter un service de référence Visual Studio 2008 génère le code suivant:

[System.Xml.Serialization.SoapElementAttribute(DataType="time", IsNullable=true)] 
public System.Nullable<System.DateTime> fromTime { ... } 

[System.Xml.Serialization.SoapElementAttribute(DataType="date")] 
public System.DateTime dateOfInspection { ... } 

Envoi d'un résultat de message dans une erreur de réflexion avec le innerException : '

' time 'est une valeur non valide pour la propriété SoapElementAttribute.DataType. La propriété peut uniquement être spécifiée pour les types primitifs.

Lors de la suppression des attributs DataType = "time" et DataType = "date" tout semble fonctionner. Mais modifier le code généré est un anti-pattern. Alors, y a-t-il un autre moyen de faire fonctionner ça?

Mise à jour:

Le problème existe que si les éléments de date ou d'heure sont annulable!

J'ai signalé un bogue sur le site de connexion Microsofts. Si vous avez le même problème que vous pouvez voter it up ici: https://connect.microsoft.com/VisualStudio/feedback/details/534453/consuming-java-webservice-with-nullable-date-and-time-elements-in-wcf-generates-invalid-datatype-attributes

Mise à jour 2:

Microsoft a confirmé que c'est un bug et unlikly à fixer.

Mise à jour 3:

J'ai vérifié avec VS2010 et il génère toujours le mauvais code. Btw, nous avons fini par modifier le code généré ...

+0

http://www.headsphere.net/2007/11/java-wcf-datetime-interop.html? –

+0

Cela semble être un bug. Veuillez le signaler à l'adresse http://connect.microsoft.com/visualstudio/. Ensuite, postez l'URL du rapport de bogue ici, afin que les autres puissent voter dessus. –

+0

Avez-vous essayé de nouveau dans Visual Studio 2010? Si oui est le même bug toujours là? (Je demande parce que mon employeur devient fou avec WCF ces jours-ci ... –

Répondre

2

Une solution de contournement potentielle pour le bogue serait de créer votre propre générateur de proxy. Ceci est similaire à la modification du code généré, mais est sans doute préférable car vous modifiez ce qui est généré, plutôt que de faire une modification post-génération.

Voir http://blogs.msdn.com/b/pedram/archive/2007/08/10/customising-wcf-proxy-generation-in-visual-studio-2008.aspx pour les instructions. Remarques concernant le chemin des entrées de registre que vous devez créer: VS2010 aura la version 10.0 dans le chemin du registre, et sur Windows 64 bits, elle doit être dans SOFTWARE\Wow6432Node\Microsoft, et non SOFTWARE\Microsoft. Je ne suis pas sûr de savoir quels générateurs cela est et n'est pas possible/facile, sauf que vous pouvez le faire avec le WcfProxyGenerator en étendant la classe utilisée par cet outil (c'est ce qui est fait dans le lien ci-dessus).