2012-12-21 15 views
8

Tüketmeye çalıştığım birkaç JAX-WS hizmetim var, ancak hizmetten (değiştiremediğim) XML'nin geçersiz bir DTD'si var. publicId ve systemId arasında beyaz boşluk olmadığından XMLStreamReaderException). Müşterilerin kötü biçimlendirilmiş DTD'leri görmezden nasıl çıkartacağım?JAX-WS istemcileri için XML Doğrulamasının Yoksayılması

+2

jaxws hangi sürümünü kullanıyorsunuz? Jaxws'ın dtds içinde olduğunu bilmiyordum. – jtahlborn

+1

[bu bağlantı] (http://metro.1045641.n5.nabble.com/JAX-WS-RI-2-1-x-susceptible-to-DTD-entity-expansion-attack-td1062920.html) olabilir işe yarar. Çeşitli jaxws sürümleri ile ilgili olarak dtd işleme ayrıntıları. – jtahlborn

+0

Genelde, WS'nin yerel bir DTD kullanmasına (bunun bir JAX özelliği olup olmadığını bilmemesine) ya da özel bir işleyiciye girdiğine bakardım: http://pic.dhe.ibm.com/infocenter/ wasinfo/v7r0/index.jsp? topic =% 2Fcom.ibm.websphere.express.doc% 2Finfo% 2Fexp% 2Fae% 2Ftwbs_jaxwshandler.html –

cevap

1

WSDL ürününün bir parçası mı? Evet ise, XML'u yerel olarak okumak için JAXWS catalog'u kullanabilir ve ardından servisi çağırırsınız.

WSDL'u indirmeniz, düzeltmeniz ve yerel olarak saklamanız gerekiyor. Daha sonra, bir Service örneğini oluştururken, yerel mağazanızdan WSDL'u okuyun. endpoint özelliğini güncelleyin ve hizmeti çağırın.

+0

Bu yapılması gereken, ne yazık ki. JAX'in DTD'leri bu kadar küçük bir problemle halledememesi, özellikle de _exactly_'in neyin yanlış olduğunu ve boş bir dize değeriyle iyi bir şey yapması gibi bir utanç duyuyorum. – doctorless

İlgili konular