2014-12-04 19 views
7

JAX-WS kullanılarak nesne şemasını içe aktarma bildirimi yerine tek bir WSDL dosya bildirimine eklemek için WebLogic 10.3.6 tarafından oluşturulan bir web hizmetini nasıl yapılandırabilirim?JAX-WS ile WebLogic'te şema içe aktarma yapmadan tek WSDL

örnek kod:

Arayüz

import javax.ejb.Local; 

@Local 
public interface CustomerBeanLocal { 

    public void updateCustomer(Customer customer); 

} 

Oturum Bean

import javax.ejb.Stateless; 
import javax.jws.WebService; 

@Stateless 
@WebService 
public class CustomerBean implements CustomerBeanLocal { 

    @Override 
    public void updateCustomer(Customer customer) { 
     // Do stuff... 
    } 

} 

Oluşturulan WSDL

Aşağıdaki örnekte <xsd:import> etiketiyle içe aktarılamayan şema tanımlarına ihtiyacımız var, ancak WSDL içinde bildirilmek üzere, tüm sözleşme bilgileri tek bir WSDL dosyasında olduğu anlamına gelir. Diğer dosyaların bağımlılıkları yok.

<!-- ... --> 

<types> 
    <xsd:schema> 
    <xsd:import namespace="http://mybeans/" schemaLocation="http://192.168.10.1:7001/CustomerBean/CustomerBeanService?xsd=1" /> 
    </xsd:schema> 
</types> 

<!-- ... --> 

WildFly ile aynı kod WSDL içindeki şema türlerini içerir ve içe aktarma özelliğini kullanmayın. Bazı araştırmalardan sonra, Bean/sunucuyu WebLogic'te yapması için bir yol bulamadım (JAX-WS veya WebLogic'e ait özel mülkleri bulamadı).

Dışa aktarılan bir şemaya sahip olmanın (yeniden kullanılabilirlik vb.) Faydalarını anlıyorum, ancak türlerin ithal edilmeyen WSDL içinde bildirilmesi gereken bir gereksinimdir.

+0

Bu da benzer bir soruya oldukça iyi bir cevaptır: http://stackoverflow.com/questions/16030574/jax-ws-has-xsd-schema-in-different-url –

+0

Ben manuel müdahale tasarruf ediyorum son kaynak olarak. Yapılandırmanın bir yolu olmalı (taşınabilir olmayan bir özellikte bile olsa). Eğer manuel baskı, WebLogic için tek alternatifse, muhtemelen sözleşme-ilk nesil için gideceğim. – BonanzaOne

cevap

2

Wsdl nesli için sağlanan wsgen-aracını kullanıyor musunuz? Varsa, tam olarak istediğinizi yapan

isimli bir parametre vardır.

"Bir oluşturulan wsdl içinde şemaları satır içi Kullanılan -wsdl seçeneği ile birlikte kullanılmalıdır.". (Kaynak: https://jax-ws.java.net/nonav/2.2.1/docs/wsgen.html)

+1

Sunucumdaki JAX-B ve JAX-WS açıklamalı POJO'ların dağıtılmasından sonra WSDL'yi URL'den alıyorum ve tam hizmet URL'sinden sonra "? WSDL" metnini ekliyorum. WSDL çalışma zamanında oluşturulur. Çalışma zamanını satır içi şemaları oluşturmak için söyleyebileceğim herhangi bir yol biliyor musunuz? Önerinize olabildiğince çabuk yaklaşacağım (hafta sonu). – BonanzaOne

+0

Üretilen WSDL dosyasının WebLogic tarafından kontrol edilmesi WSGEN ** 2.1.5 ** sürümünü kullandığını görebiliyorum (dosyanın içinde bir yorum var).-inlineSchemas anahtarı [2.2.1 sürümü tarafından tanıtıldı] (https://jax-ws.java.net/nonav/2.2.1/docs/changelog.html) olduğundan, sonuç WebLogic sürümde 10.3.6 bunu yapamaz. WSDL'leri WSGEN'in son bir sürümünü kullanarak kapsayıcı dışında üreteceğim. Teşekkür ederim. – BonanzaOne

+0

hoşgeldiniz :-) –

0

Sen jaxws-maven-plugin ile wsgen otomatik hale getirebilirsiniz. Eklentinin en son sürümü jaxws 2.2'yi kullanır, ancak target 2.1'i belirtirseniz, oluşturulan eserler platformunuzla uyumlu olacaktır.

<plugin> 
    <groupId>org.jvnet.jax-ws-commons</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
     <id>wsgen</id> 
     <phase>process-classes</phase> 
     <goals> 
      <goal>wsgen</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <sei>...put your WS impl class here...</sei> 
     <keep>true</keep> 
     <verbose>true</verbose> 
     <target>2.1<verbose> 
     <genWsdl>true</genWsdl> 
     <xnocompile>true</xnocompile> 
     <inlineSchemas>true</inlineSchemas> 
    </configuration> 
    </plugin> 

Paketi (WEB-INF/wsdl altında varsayılan olarak), savaş dosyasında oluşturulan WSDL dosyası ve sonra ek nota wsdlLocation ekleyin.

@WebService(wsdlLocation = 'MyService.wsdl')