2017-03-22 27 views
0

我們在我們的組織中共享了很多CSV文件,其中包含各種信息。我編寫了一個小型Java程序來監視某個共享文件夾並讀取新的csv文件。我的目標是允許通過SOAP Web服務讀取和更新信息。我的問題是信息結構不是靜態的,所以我不能從我的Java結構創建一個WSDL文件(例如使用spring ...)。我需要創建一個動態的WSDL文件。我正在研究Axis2(http://axis.apache.org/axis2/java/core/),但我仍然覺得我錯過了一些東西,因爲我需要用動態生成的WS定義構建java類,然後編譯,構建.aar包,然後移動該文件到axis2文件夾。這似乎有點沉重。Java中的動態Web服務(SOAP)提供程序

基本上我只需要兩個方法:

  • 發現(ID) - >返回與指定ID行,如果ID爲NULL,則返回所有
  • 更新(ID) - >更新行,在這裏我需要動態內容,因爲我需要傳遞字段和應該更新的類型。

比如我有一個user.csv:

ID;FirstName;Age;Mail 
01;Stephanie;27;[email protected] 

應該產生這樣的:

[...]

<xsd:element name="delete"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element maxOccurs="1" minOccurs="1" name="id" type="xsd:string" /> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 


<xsd:element name="insert"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element maxOccurs="1" minOccurs="0" name="id" type="xsd:string" /> 
        <xsd:element maxOccurs="1" minOccurs="0" name="FirstName" type="xsd:string" /> 
        <xsd:element maxOccurs="1" minOccurs="0" name="Age" type="xsd:integer" /> 
        <xsd:element maxOccurs="1" minOccurs="0" name="Mail" type="xsd:string" /> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 

[...]

有沒有人有更好的方式做到這一點?

乾杯, 斯蒂芬妮

回答

0

使用簡單的WS只是在XML RAW體2的操作。

xml必須與WSDL中的外部XSD非兼容。在服務器中,您擁有所有的XSD,並且您可以驗證輸入並使用Jaxb創建對象,例如,您可以將其用於CSV中的CRUD操作。

+0

所以你建議我自己編寫SWDL文件(自己生成它)?但是終點不知道如何處理這些「田野」,還是我誤解了? – Stephanie

+0

你可以在一個byte []字段中輸入一個xml文件來表示一個輸入,在另一個字段中爲另一個字段添加一個唯一的ID以供端點更新,所以在服務器中你可以實現一個工廠模式,這個工廠模式爲你提供一個基於唯一ID的端點實現。現在對於端點你有一個特定的XSD來驗證其他字段中的輸入(字節[]),你可以驗證並創建正確的對象。無論你想要什麼,都可以進行CRUD操作。主ws只是一個知道密鑰實現的路由器。所有其他XSD都與客戶端外部共享,而不是WSDL的一部分 –